Assembly ASM 16位将输入缓冲字符串转换为数字
也许有人能帮我。我正在尝试打印用户输入的尽可能多的“”。所以我需要把字符串转换成数字。我试图在循环中完成它,但有一些问题我的代码不能正常工作它正在打印65535'',基本上这是最大值。也许有人能解释我的问题在哪里Assembly ASM 16位将输入缓冲字符串转换为数字,assembly,x86-16,tasm,Assembly,X86 16,Tasm,也许有人能帮我。我正在尝试打印用户输入的尽可能多的“”。所以我需要把字符串转换成数字。我试图在循环中完成它,但有一些问题我的代码不能正常工作它正在打印65535'',基本上这是最大值。也许有人能解释我的问题在哪里 .MODEL small .STACK 200h .DATA input DB 4, ? , 4 dup (?) Symbol DB '*$' .CODE Start: mov AH,0Ah mov ds, ax mov DX, offset input int
.MODEL small
.STACK 200h
.DATA
input DB 4, ? , 4 dup (?)
Symbol DB '*$'
.CODE
Start:
mov AH,0Ah
mov ds, ax
mov DX, offset input
int 21h
mov cl, input[2]
mov si,2
mov ax,0
LoopStart:
mov bh,10
mul bh
mov ah,input[si]
add ah,al
sub cl,1
cmp cl,0
jne LoopStart
mov cx,ax
mov ax, @DATA
mov ds, ax
mov dx, offset Symbol
LoopStart1:
mov ah, 9
int 21h;
sub cx,1
cmp cx,0
jne LoopStart1
mov ah, 4Ch
int 21h
END Start
因此,这里将是有效的解决方案
.MODEL small
.STACK 200h
.DATA
Symbol DB '*$'
input DB 6, ? , 6 dup (?)
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov AH,0Ah
mov DX, offset input
int 21h
mov AH, 0Fh
int 10h
mov AH,0
int 10h
mov si,2
mov ax,0
mov cl,input[1]
LoopStart:
mov bh,10
mul bh
add al,input[si]
sub al,48
add si,1
sub cl,1
; cmp cl,0
jne LoopStart
mov cx,ax
mov dx, offset Symbol
LoopStart1:
mov ah, 9
int 21h;
sub cx,1
cmp cx,0
jne LoopStart1
mov ah, 0
int 16h
mov ah, 4Ch
int 21h
END Start
mul-bh
不执行AX=AL*bh
。将乘法结果的两半相加是没有意义的。有关工作代码,请参阅(应该很容易移植到16位)我在前面的输入部分遇到了问题。我很确定mov-ah,0ah;mov-ds,ax
会将您的ds设置为一些奇怪的东西。你真的确定你的输入有效吗?尝试打印回您得到的字符串…@dratenik:或使用调试器执行单步操作,以便检查内存和寄存器。但好的一点是,mov-ah,0ah
看起来不太可能是正确的细分基础;这不是固定的。(AL在进入EXE时会有一些固定值,IDK什么。除非对代码大小进行超级优化,否则依赖它不是一个好主意。)设置mov ax,@DATA;中间的MOV DS,AX < /代码>可能是你想要的东西,移动到开始,然后再也不接触DS。如果最大值是66536,为什么输入呼叫只要求4个字符?