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他们的值,求助谢谢.
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
就是一个将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