第1个回答 2012-12-07
给你一个例子吧~~王爽汇编那本书的课程设计一中的代码
assume cs:codesg
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个字符串
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型数据
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型数据
data ends
showdata segment
db 10 dup(0)
showdata ends
datashop segment
db 10 dup(0)
datashop ends
codesg segment
start:
;数据
mov ax,data
mov ds,ax
;栈
mov ax,showdata
mov ss,ax
mov sp,12
;显示
mov ax,0b800h
mov es,ax
;初始化数据
mov cx,21
mov bx,0
mov bp,320
s: ;显示年份
call showyear
call showinfo
call showperson
call shownumber
add bx,4
add bp,160
loop s
mov ax,4c00h
int 21h
showyear:
;准备
push cx
mov cx,4
mov si,0
mov di,0
;开始
yearlp: mov al,[bx+si+0h]
mov es:[bp+di+0h],al
mov byte ptr es:[bp+di+1h],01000000b
inc si
add di,2
loop yearlp
pop cx
ret
showinfo:
;准备
push cx
;用于存储数据
mov ax,datashop
mov es,ax
;取出数字
mov si,0
mov ax,[bx+si+54h]
add si,2
mov dx,[bx+si+54h]
;规划
push ds
push es
pop ds
push bx
mov bx,0b800h
mov es,bx
;SI用来存放位置
mov si,1
;处理dx是两位数
cmp dx,0ah
ja div3
;处理dx是一位数
cmp dx,0
ja div2
;处理dx是0
mov di,10
jmp div1
div3:
mov di,100
div di
;把商压栈
push ax
;转移余数
mov ax,dx
xor dx,dx
;先处理余数
mov di,10
div di
mov [si],dl
inc si
xor dx,dx
div di
mov [si],dl
inc si
;恢复
pop ax
jmp div1
div2:
mov di,10
div di
mov [si],dl
inc si
div1:
mov bx,10
mov di,20h
call startdiv
pop bx
pop ds
pop cx
ret
showperson:
;准备
push cx
;START
;确定位置
mov ax,bx
xor dx,dx
mov di,2
div di
;取出数字
mov si,ax
mov ax,[si+0a8h]
;准备存储
push ds
push bx
mov di,40h
mov si,1
call show
;END
;恢复
pop bx
pop ds
pop cx
ret
shownumber:
;准备
push cx
;取出资金数字
mov si,0
mov ax,[bx+si+54h]
add si,2
mov dx,[bx+si+54h]
;准备
push dx
push ax
;取出人数数字
;确定位置
mov ax,bx
xor dx,dx
mov di,2
div di
;取出数字
mov si,ax
mov di,[si+0a8h]
;恢复被除数
pop ax
pop dx
;开始除法
div di
;储存商
push ds
push bx
mov di,60h
mov si,1
call show
;恢复
pop bx
pop ds
pop cx
ret
show:
mov cx,datashop
mov ds,cx
mov bx,10
startdiv:
xor dx,dx
div bx
mov [si],dl
cmp ax,0
je enddiv
inc si
jmp startdiv
enddiv:
mov cx,si
showwhat:
mov al,[si]
add al,30h
mov es:[bp+di],al
mov es:[bp+di+1h],al
dec si
add di,2
loop showwhat
ret
codesg ends
end start
这个在debug中运行-g可以查看效果