目录 上一页 下一页 下一章

第5章 子程序和串处理 -89-










main

calc




caloop:








return:



calc

hexout


hexloop:







mov
mov
mov
call
mov
mov
call
mov
int
endp

proc
push
push
mov
mov

mov
cmp
jz
mov
int
inc
inc
jmp

pop
pop
ret
endp

proc
push
mov

push
mov
rol
push
and
xlat
mov
word ptr addr_tbl,offset mess
word ptr addr_tbl+2,offset sum
bx,offset addr_tbl
calc
ax,sum
bx,offset ascii
hexout
ah,4ch
21h


near
bx
bp
bp,word ptr [bx]
bx,word ptr [bx+2]

dl,byte ptr ds:[bp]
dl,24h
return
ah,2
21h
bp
word ptr [bx]
caloop

bp
bx



near
ax
cx,2

cx
cl,4
al,cl
ax
al,0fh
ascii
dl,al
;字符串偏移地址存入地址表
;将SUN的偏移地址存入地址表
;BX送入地址表的偏移地址
;调用CALC子过程
;AX寄存器送入字符总数
;ASCII表的偏移地址送入BX
;调用HEXOUT子过程
;结束进程



;CALC子过程
;保存BX寄存器
;保存BP寄存器
;将字符串的偏移地址送入BP
;将SUM变量的偏移地址送人BX

;取得一个字符
;是'$'吗?
;若是则转至RETURN
;显示这个字符

;BP指向下一个字符
;SUM变量加1
;转至CALOOP处理下一个字符

;恢复BP寄存器
;恢复BX寄存器
;返回主程序


;HEXOUT子过程
;保存AX寄存器
;显示2位十六进制数

;暂存显示位数
;准备循环移位数
;将AL左循环移4位
;暂存移位结果
;保留AL原值的高4位
;取得对应的ASCII码
;将数字对应的ASCII码送入DL

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章