实验7 其他的都没有问题了 但是 除数 被除数那里有点儿问题
assume cs:code, ds:data, es:table, ss:stackdata segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;地址是0-53H
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
; 收入来源偏移地址 54H-0a7到下边应该再+1 因为还有空格
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;雇佣人员偏移地址 0a8h-0d1h
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
stack segment
db 8 dup (0)
stack ends
code segment
start: mov ax,data ;既然设置关联了 先把数据传进去
mov ds,ax ;用ax中介转换给ds
mov ax,table ;设置关联
mov es,ax ;这里可以用附加段es 目标数据
mov bx,0 ;用bx设置为0 bx代表数据的偏移
mov si,0 ;用si设置为0 代表es段的偏移地址
mov cx,21 ;设置21次写入 es段si的偏移地址
s: push cx ;cx入栈
mov cx,2 ;设置2次写入 es段si的偏移地址 因为是用字 所以两次
s0: mov ax, ;设置 数据段的偏移
mov es:,ax ;设置 目标段的偏移(es)
add si,2 ;0 2 4 10 12 14 20
add bx,2 ;2 4 6 8 10 12 14 16 20
loop s0
mov ax, ;设置收入数量的data段起始地址
mov es:,ax ;因为前边循环出来si已经变成4了 那么起始地址就是4+1 第5位 这里为收入的低位
mov ax, ;设置收入数量的data段起始地址
mov es:,ax ;因为前边循环出来si已经变成4了 那么起始地址就是4+2 第6位 这里为收入的高位
mov ax, ;设置人员数量的data段起始地址
mov es:,ax ;设置目标段 的偏移并且写入 前边已经是 4了 要改写的数据在目标段的10位 所以si+6
mov ax,es:
mov dx,es:
div word ptr es:
mov es:,ax
add si,12 ;前边两次运算后 si=4 这里+12 正好等于下一个段的开头
pop cx ;cx出栈
loop s
mov ax,4c00h
int 21h
code ends
end start
以上代码 如果没有 下边这段 运行 正常 但是加上这段 就卡死了 这会儿脑袋有点儿懵放出来大家看看吧 我写的可能有点儿绕用字和循环 2个变量+ 偏移地址
mov ax,es:
mov dx,es:
div word ptr es:
mov es:,ax
页:
[1]