目录 上一页 下一页 下一章

-104- PC机汇编语言实战精解









exit:

not_fd:



main
code

rol
push
and
xlat
mov
int
pop
loop
mov
int
mov
mov
int
jmp
endp
ends
end
ax,1
ax
ax,000fh

ah,0eh
10h
ax
outloop
ah,4ch
21h
dx,offset errmsg
ah,09h
21h
exit


main

;暂存AX寄存器
;保留低4位
;取得对应的ASCII码
;利用10H中断的0EH功能
;输出AL中的字符
;取回AX寄存器
;处理下一个数位
;结束程序








  程序中并没有使用LODS指令,而是把SI寄存器作为一个可以作间接寻址的一般寄存器应用。如何使用串处理指令解决这个问题呢?请看下面的程序:
data

mess
ascii
errmsg
data
code

main









out_cx:



outloop:


segment
assume
db
db
db
ends
segment
assume
proc
mov
mov
mov
mov
mov
mov
repnz
jz
jmp
sub
mov
mov
mov
rol
rol
rol

ds:data
'Price: $1.00',0dh,0ah,0
'0123456789ABCDEF'
07h,'Character not found!',


cs:code
far
ax,data
ds,ax
es,ax
di,offset mess
cx,14
al,'$'
scasb
out_cx
not_found
di,offset mess+1
ax,di
bx,offset ascii
cx,4
ax,1
ax,1
ax,1




0dh,0ah,'$' ;字符未找到




;初始化DS、ES寄存器指向数据段


;DI寄存器指向字符串MESS
;在14个字符中查找'$'
;要查找的字符是'$'
;扫描字符串
;找到'$'后转至OUT_CX
;未找到'$'则转至NOT_FOUND
;计算'$'符的偏移位置
;偏移位置送入AX寄存器
;BX寄存器指向ASCII表
;处理4个数位
;AX寄存器向左循环移4位



Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章