. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->数据处理的两个基本问题
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  【实验7】为什么你们最后的结果,都只把年份弄对了,而收入、员工数目、人均收入都没有弄进去呢?  [待解决] 回复[ 5次 ]   点击[ 435次 ]  
girl_lulu
[帖 主]   [ 发表时间:2012-05-29 22:09 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
1.为什么只复制了年份(而且前面一个1 没有复制进来),其他的没有复制进来???

  另外,-ds:0 查看data段,定义的那些数据(出来年份以外),怎么也没有显示出来?
  

  我看到别人做的实验,好多也是这样的错误 》


如下:
1476:00AA 8946F8        MOV     [BP-08],AX
-g a1

AX=016F  BX=0000  CX=0000  DX=1888  SP=0010  BP=0150  SI=00D2  DI=0005
DS=1453  ES=1461  SS=0020  CS=1476  IP=00A1   NV UP EI PL NZ NA PE NC
1476:00A1 B8004C        MOV     AX,4C00
-d es:0
1461:0000  31 39 37 35 20 10 00 00-00 20 03 00 20 3F 3F 00   1975 .... .. ??.
1461:0010  00 39 37 36 20 16 00 00-00 20 07 00 20 3F 3F 00   .976 .... .. ??.
1461:0020  00 39 37 37 20 7E 01 00-00 20 09 00 20 3F 3F 00   .977 ~... .. ??.
1461:0030  00 39 37 38 20 4C 05 00-00 20 0D 00 20 3F 3F 00   .978 L... .. ??.
1461:0040  00 39 37 39 20 56 09 00-00 20 1C 00 20 3F 3F 00   .979 V... .. ??.
1461:0050  00 39 38 30 20 40 1F 00-00 20 26 00 20 3F 3F 00   .980 @... &. ??.
1461:0060  00 39 38 31 20 80 3E 00-00 20 82 00 20 3F 3F 00   .981 .>.. .. ??.
1461:0070  00 39 38 32 20 A6 5F 00-00 20 DC 00 20 3F 3F 01   .982 ._.. .. ??.
-d ds:0
1453:0000  31 39 37 35 31 39 37 36-31 39 37 37 31 39 37 38   1975197619771978
1453:0010  31 39 37 39 31 39 38 30-31 39 38 31 31 39 38 32   1979198019811982
1453:0020  31 39 38 33 31 39 38 34-31 39 38 35 31 39 38 36   1983198419851986
1453:0030  31 39 38 37 31 39 38 38-31 39 38 39 31 39 39 30   1987198819891990
1453:0040  31 39 39 31 31 39 39 32-31 39 39 33 31 39 39 34   1991199219931994
1453:0050  31 39 39 35 10 00 00 00-16 00 00 00 7E 01 00 00   1995........~...
1453:0060  4C 05 00 00 56 09 00 00-40 1F 00 00 80 3E 00 00   L...V...@....>..
1453:0070  A6 5F 00 00 91 C3 00 00-C7 7C 01 00 81 24 02 00   ._.......|...$..
-
girl_lulu
[第1楼]   [ 回复时间:2012-05-29 22:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
忘记贴代码了,
assume cs:code,ds:data,es:table

data segment
  db '1975','1976','1977','1978','1979','1980','1981','1982'
  db '1983','1984','1985','1986','1987','1988','1989','1990'
  db '1991','1992','1993','1994','1995'

  dd      16,     22,    382,   1356,  2390,  8000, 16000,  24486
  dd   50065,  97479, 140417, 197514,345980,590827,803530,1183000
  dd 1843000,2759000,3753000,4649000,5937000

  dw   3,  7,   9,  13,  28,  38, 130, 220
  dw 476,778,1001,1442,2258,2793,4037,5635
  dw 8226,11542,14430,15257,17800
data ends

table segment
  db 21 dup('year summ ne ?? ')
table ends

code segment
  start:
  mov ax,data
  mov ds,ax

  mov ax,table
  mov es,ax

  mov ax,0020h
  mov ss,ax
  mov sp,10h




  mov bp,0
  mov di,0
  
  mov bx,0
  mov si,0

  mov cx,21
  s2:
      push cx

      mov cx,4
      s1:
      mov al,ds:[bx+si]
      mov es:[bp+di],al

      inc si
      inc di
      loop s1

  pop cx

  add bp,16
  mov di,0
  loop s2




  mov bp,0
  mov di,5
  
  mov bx,0

  mov cx,21
  s4:
      push cx

      mov cx,4
      s3:
      mov al,ds:[bx+si]
      mov es:[bp+di],al

      inc si
      inc di
      loop s3

  pop cx

  add bp,16
  mov di,5
  loop s4




  mov bp,0
  mov di,0ah
  
  mov bx,0

  mov cx,21
  s6:
      push cx

      mov cx,2
      s5:
      mov al,ds:[bx+si]
      mov es:[bp+di],al

      inc si
      inc di
      loop s5

  pop cx

  add bp,16
  mov di,0ah
  loop s6




  mov di,5
  mov bp,0

  mov cx,21
  s7:
      mov ax,es:[bp+di]
      add di,2
      mov dx,es:[bp+di]

      add di,5
      div word ptr es:[bp+di]

      add di,3
      mov es:[bp+di],ax

      add bp,16
      mov di,5
      loop s7


  mov ax,4c00h
  int 21
code ends

end start

注:前面3个循环是复制用的,后面一个是计算平均收入!
e56004474
[第2楼]   [ 回复时间:2012-05-30 11:06 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
注意年份的数据跟其它的数据的区别。。
年份加引号了。
其它数据,是16进制的。计算的结果也是16进制的,需要再转换下。
1461:0000  31 39 37 35 20 10 00 00-00 20 03 00 20 3F 3F 00   1975 .... .. ??. 
1461:0010  00 39 37 36 20 16 00 00-00 20 07 00 20 3F 3F 00   .976 .... .. ??. 

1976 这个数据的1没复制,源程序中有错误的哦。
wwt406
[第3楼]   [ 回复时间:2012-07-20 22:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2012-04-23 22:44
我和楼主遇到的问题一样,只有把年份复制了,其它没有复制成功,纠结
xiayiguo
[第4楼]   [ 回复时间:2012-08-18 20:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-13 19:06
mov ax,0020h 
  mov ss,ax 
  mov sp,10h 
你没有定义栈段!就直接用栈了,为什么用0020h?
asura-king
[第5楼]   [ 回复时间:2012-10-28 01:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-09-16 00:19
回复:[第4楼]
------------------
什么定义栈段只是形式上的罢了,在内存中也根本没有分段的,分段我们自己和CPU的安排。


还有啊,楼主,这个实验最主要是考验我们对结构化的数据进行处理的能力。
可以把实验7中的table 看成是一个结构体数组。简单说就是一个数组每个元素是一个结构体。
一个循环就足够了,一个循环代表填充这整个数组,而每次循环代表要填充完这个数组中一个结构体中的元素。

给你看看我写的吧 ,参考参考

        mov ax,data
        mov ds,ax
        
        mov ax,table
        mov es,ax
        
        mov bp,0
        mov bx,0
        mov di,0
        
        mov cx,21
     s: 
        mov si,0
        mov ax,0[bp+si]
        mov es:[bx][0],ax

        add si,2
        mov ax,0[bp+si]
        mov es:[bx][2],ax
        
        ;输入年份

        mov byte ptr es:[bx][4],' ' ;添加空格

        mov si,0 
        mov ax,84[bp+si]
        mov es:[bx][5],ax
        
        add si,2
        mov dx,84[bp+si]
        mov es:[bx][7],dx
        ;输入收入总数

        mov byte ptr es:[bx][9],' ' ;添加空格
        
        div word ptr 168[di] ; 计算人均收入
        
        mov dx,168[di]
        mov es:[bx][10],dx
        ;输入雇员数

        mov byte ptr es:[bx][12],' ' ;添加空格
        
        mov es:[bx][13],ax
        ;输入人均收入
        
        mov byte ptr es:[bx][15],' ' ;添加空格

        add bp,4
        add bx,16
        add di,2

        loop s
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved