linha0 发表于 2011-6-29 14:21:12

实验7,代码+分析,请多指教

本帖最后由 linha0 于 2011-6-29 14:24 编辑

assume cs:code,ds:data

data segment

db '1975','1976','1977','1978','1979','1980','1981'
db '1982','1983','1984','1985','1986','1987','1988'
db '1989','1990','1991','1992','1993','1994','1995'
;以上是表示21年的21个字符串。共84个字节,起始单元:0

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的21个dword型数据。共84个字节,起始单元:84

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word型数据。共42个字节,起始单元:168

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 bx,0
                mov si,0
                mov di,0
                mov cx,21
      s:      mov ax,
                mov es:,ax
                mov ax,2
                mov es:2,ax
                ;以上,从Data中复制年份到Table
               
                mov ax,84                         ;总收入的低16位数
                mov dx,86                         ;总收入的高16位数
                mov es:5,ax                        ;4单元中的空格不变
                mov es:7,dx
                ; 以上,从Data中复制总收入到Table
               
                div word ptr 168                  ;计算人均收入,并存入AX中
               
                mov dx,168
                mov es:10,dx                      ;复制雇员数,9单元中的空格不变
                mov es:13,ax                      ;将人均收入存入Table中
               
                add bx,4             ;在Data中,表示为指向下一年的(年份、总收入)双字型数据
                add si,2               ;在Data中,表示为指向下一年的(雇员数)字型数据
                add di,16            ;在Table中,表示为指向下一年的数据项集合
                loop s
               
                mov ax,4c00h
                int 21h
code ends
end start

有你更完美 发表于 2011-6-29 15:05:36

你的起始单元都是用十进制的,这样怎么也可以,小甲鱼的都是转换成16进制的

linha0 发表于 2011-6-29 18:54:27

编译器会帮我们转化的:lol

king嗜血法师 发表于 2011-6-30 01:25:15

我也喜欢用十进制:lol

有你更完美 发表于 2011-6-30 09:08:35

你们这样不会出意外吧

milorguan 发表于 2011-7-12 16:55:05

table段为什么不关联

milorguan 发表于 2011-7-12 16:55:46

不关联会怎么样

linha0 发表于 2011-7-12 18:50:01

本帖最后由 linha0 于 2011-7-12 18:50 编辑

milorguan 发表于 2011-7-12 16:55 static/image/common/back.gif
table段为什么不关联
mov ax,table
mov es,ax

不是很明白“关联”这个词在你心里是什么意思?

难道是把它的段地址设置到段寄存器,就叫做“关联”?

如果是这个意思话,这个关不关联都差不多。凡是用“segment…………ends”定义的段都将占据一定内存空间(不管“关联”与“不关联”),而这个空间必定为16的倍数。

还有一点要记住,内存空间是个线性的空间;而“段”的概念是人们定义的,主要是为了方便寻址而已;

milorguan 发表于 2011-7-12 21:44:17

linha0 发表于 2011-7-12 18:50 static/image/common/back.gif
不是很明白“关联”这个词在你心里是什么意思?

难道是把它的段地址设置到段寄存器,就叫做“关联 ...

关联的意思是 assume...........

linha0 发表于 2011-7-13 12:06:42

milorguan 发表于 2011-7-12 21:44 static/image/common/back.gif
关联的意思是 assume...........

上面的解释还是一样有用。

milorguan 发表于 2011-7-13 12:57:29

linha0 发表于 2011-7-13 12:06 static/image/common/back.gif
上面的解释还是一样有用。

我的意思是用assume关联寄存器

linha0 发表于 2011-7-13 14:33:08

milorguan 发表于 2011-7-13 12:57 static/image/common/back.gif
我的意思是用assume关联寄存器

都说了,不管“关联”与“不关联”,都没有多大的影响。

你就算把"assume…………"去掉,对程序也没多大的影响(按照我学到第11章的认识来看)

milorguan 发表于 2011-7-14 10:15:59

哇,哇,哇,

Mr.han 发表于 2011-7-15 05:46:29

不关联你用MASM编译的时候不报错么?

linha0 发表于 2011-7-15 12:54:31

Mr.han 发表于 2011-7-15 05:46 static/image/common/back.gif
不关联你用MASM编译的时候不报错么?

我用实验7的代码测试过,暂时没有出现错误!

我挖 发表于 2013-7-2 22:57:53

看帖就要回帖支持下

fishmo 发表于 2013-7-2 23:10:58

看看老帖,支持下

Geeker.s 发表于 2013-7-2 23:18:08

assume es:table?
页: [1]
查看完整版本: 实验7,代码+分析,请多指教