gpt4 book ai didi

assembly - 使用 INT 21h (DOS) 和 8086 汇编读取数字

转载 作者:行者123 更新时间:2023-12-02 20:10:28 25 4
gpt4 key购买 nike

我需要提示用户一条消息,告诉他写一个数字,然后我存储这个数字并对其进行一些操作在 INT 21h 中搜索后我发现了这个:

INT 21h / AH=1 - read character from standard input, with echo, result is stored in AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.

example:

mov ah, 1
int 21h

主要问题是它只能读取一个字符并将其表示为 ASCII所以如果我需要写数字“357”我将其读作 3 , 5 , 7

这不是我的目标。有什么想法吗?

最佳答案

When you managed to get the user input ,将其指针放入 ESI(ESI = 字符串的地址)

.DATA
myNumber BYTE "12345",0 ;for test purpose I declare a string '12345'

Main Proc
xor ebx,ebx ;EBX = 0
mov esi,offset myNumber ;ESI points to '12345'

loopme:

lodsb ;load the first byte pointed by ESI in al

cmp al,'0' ;check if it's an ascii number [0-9]
jb noascii ;not ascii, exit
cmp al,'9' ;check the if it's an ascii number [0-9]
ja noascii ;not ascii, exit

sub al,30h ;ascii '0' = 30h, ascii '1' = 31h ...etc.
cbw ;byte to word
cwd ;word to dword
push eax
mov eax,ebx ;EBX will contain '12345' in hexadecimal
mov ecx,10
mul ecx ;AX=AX*10
mov ebx,eax
pop eax
add ebx,eax
jmp loopme ;continue until ESI points to a non-ascii [0-9] character
noascii:
ret ;EBX = 0x00003039 = 12345
Main EndP

关于assembly - 使用 INT 21h (DOS) 和 8086 汇编读取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868226/

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