小弟初学汇编语言,很多的问题都不懂,希望大家可以指导一下,多谢!
assume cs:code,ds:data,ss:stack,es:table
data 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'
;21年21个字符串 21*4=84 0-83 0-53
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 21*4=84 84-167 54-a7 si
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 21*2=42 168-209 a8-209 di
data ends
table segment
db 48 dup (0) ;210-247 d2-f7
table ends
stack segment
db 48 dup (0) ;248-295 f8-127
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,48
mov ax,table
mov es,ax
mov di,0
mov si,0
mov bx,0
mov cx,0
mov dx,0
call divresult
mov ax,4c00h
int 21h
divresult:
mov si,84
mov di,168
mov cx,2
mov ax,ds:[si]
mov dx,ds:[si+2]
r1:
mov cx,ds:[di]
div cx
add dx,30h
mov es:[bx],dx;就是这里执行完之后在es:[0]显示依旧为0,dx的值没有进去
add bx,2
mov dx,0
mov cx,ax
jcxz r1
ret
code ends
end start
你好,我也在学习汇编嘻嘻,一同进步.
关于你的问题,我做这道题也遇到了,我当时也是很奇怪,好多内存单元的值为0.事实上,要注意那是16进制,且大的两位再后,小的在前,我们看着会很抽象的.
我的方法是,下载别人做完的结果(图片),和我的显示结果对照,这样就可以直观的检测我做对了没.
我记得最后的显示结果,只有年份是可以显示的(因为那是ascii码),其他的都是点和一些意义不明的字符