ASM 16Bit将输入缓冲区字符串转换为数字

问题描述

也许有人可以帮助我。我正在尝试打印与用户输入的数量相同的''。所以我需要将字符串转换为数字。我正在尝试循环执行,但是有一些问题,我的代码无法正常工作,它正在打印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 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