![]() | 第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 |