gpt4 book ai didi

汇编、打印ascii码

转载 作者:行者123 更新时间:2023-12-02 17:45:21 27 4
gpt4 key购买 nike

我的汇编代码有问题。我想打印存储在寄存器 cx 中的数字,但是当我尝试打印它时,它打印的是 ascii 字符而不是 ascii 数字,所以我决定编写一个程序将 ascii char 转换为 ascii 值。问题是,当我尝试调用该过程时,程序卡住,我必须重新启动 dosbox。有谁知道这段代码有什么问题?谢谢。

P4      PROC                
MOV AX,CX ;CX = VALUE THAT I WANT TO CONVERT
MOV BX,10
ASC2:
DIV BX ;DIV AX/10
ADD DX,48 ;ADD 48 TO REMAINDER TO GET ASCII CHARACTER OF NUMBER
PUSH AX ;SAVE AX
MOV AH,2 ;PRINT REMAINDER STORED IN DX
INT 21H ;INTERRUP
POP AX ;POP AX BACK
CMP AX,0
JZ EXTT ;IF AX=0, END OF THE PROCEDURE
JMP ASC2 ;ELSE REPEAT
EXTT:
RET
P4 ENDP

最佳答案

像这样的东西更适合打印十进制值(新代码是小写的):

        mov byte [buffer+9],'$'
lea si,[buffer+9]

MOV AX,CX ;CX = VALUE THAT I WANT TO CONVERT
MOV BX,10
ASC2:
mov dx,0 ; clear dx prior to dividing dx:ax by bx
DIV BX ;DIV AX/10
ADD DX,48 ;ADD 48 TO REMAINDER TO GET ASCII CHARACTER OF NUMBER
dec si ; store characters in reverse order
mov [si],dl
CMP AX,0
JZ EXTT ;IF AX=0, END OF THE PROCEDURE
JMP ASC2 ;ELSE REPEAT
EXTT:
mov ah,9 ; print string
mov dx,si
int 21h
RET

buffer: resb 10

它不是直接打印每个字符,而是以相反的顺序将字符添加到缓冲区。对于值 123,它将在 buffer[8] 处添加“3”,在 buffer[7] 处添加“2”,在 buffer[6] 处添加“1”——因此,如果您随后打印从 buffer+6 开始的字符串,您将得到“123 ".
我正在使用 NASM 语法,但希望它应该足够清楚。

关于汇编、打印ascii码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15621258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com