首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

怎样显示寄存器的值解决办法

2012-04-26 
怎样显示寄存器的值datarea segment? tips db Please input a string:,13,10,$ ? errstr db length i

怎样显示寄存器的值
datarea segment?
tips db 'Please input a string:',13,10,'$'
? errstr db 'length is too long!',13,10,'$'
exitstr db 'exit','$'
datarea ends
prognam segment ?
main proc far
? assume cs: prognam,ds:datarea,es:datarea
start:
? push ds
? sub ax,ax
? push ax
? mov ax,datarea
? mov ds,ax
? mov ax,datarea
? mov es,ax
? ;+++++++++++++++++++++++++++++++++++++

lea dx,tips
mov ah,9
int 21h

mov bx,0
mov cx,0
mov dx,0
mov di,0
AGAIN:
mov ax,0
mov ax,bx
add ax,cx
add ax,dx
add ax,di
cmp ax,1eh ;如果ax的值大于30就跳转到ERR打印错误信息
ja ERR

mov ax,0
mov ah,01h
? int 21h
cmp al,'$'
je EXIT
cmp al,'0'
jb L1

cmp al,'9'
jbe L2
cmp al,'A'
jb L1
cmp al,'Z'
jbe L3
cmp al,'a'
jb L1
cmp al,'z'
jbe L4

inc bx
jmp AGAIN

ERR:
? lea dx,errstr
mov ah,9h
int 21h
jmp EXIT
L1:
inc bx
jmp GOB
L2:
inc cx
jmp GOB?
L3:
inc dx
jmp GOB
L4:
inc di
jmp GOB

GOB:
cmp ah,'$'
jnz AGAIN
EXIT:
mov ax,bx
mov ah,2h
int 21h
mov ax,cx
mov ah,2h
int 21h
mov ax,dx
mov ah,2h
int 21h
mov ax,di
mov ah,2h
int 21h

? ;++++++++++++++++++++++++++++++

ret
main endp
prognam ends
? end start


代码,还是无法看到dx,bx,cx,di他们的值,求助谢谢.

[解决办法]

探讨
datarea segment
tips db 'Please input a string:',13,10,'$'
errstr db 'length is too long!',13,10,'$'
exitstr db 'exit','$'
datarea ends
prognam segment
main proc far
assume cs: prognam,d……

[解决办法]
就是一个将int转为string的功能,楼主可以参考sscanf
[解决办法]
当然是十六进制的简单了,因为每 4 个二进制位正好对应一个十六进制位,一个简单的循环,移位处理下就可以了。书上一般会有例子的吧。或者,Google 上搜索下吧。CSDN 这里的搜索功能简直是&%$+# 否则这里以前也有很多这样的内容可供参考的。
[解决办法]
代码粗糙,经供参考。
Assembly code
;子程序功能:以十六进制显示寄存器中的值;入口参数DXdisphex proc uses dx        mov cx,4d0:     push cx        mov cl,4        rol dx,cl        push dx        and dx,0fh        cmp dl,10        jb d1        add dl,37h        mov ah,2        int 21h        jmp jxd1:        add dl,30h        mov ah,2        int 21hjx:        pop dx        pop cx        loop d0        retdisphex endp 

热点排行