首页 > 解决方案 > 在emu8086中从1打印到<用户输入

问题描述

我想从用户那里得到一个数字(即 5),然后从 1 开始打印到 < 输入(即 1 2 3 4)但我的代码不会在“4”中停止,而不是循环运行到“d”

我知道循环运行 CX 次,并且在 8086 MOVZX 中不起作用,这就是为什么我首先将 AL 移动到 CL 然后将 CH 归零。

正如有人提到的那样,问题是当我将 AL 移动到 CX 时,我没有移动值 4,而是移动了 34(ASCII 值为 4),因此我的循环运行了 34 次。

现在如何将我的用户输入值转换为十进制并将其移动到 CX。有没有办法将用户输入作为十进制值存储在 AL 中?

org 100h




MOV AH, 1  ; Get user input 
INT 21H


DEC AL ; Dec AL to satisfy the condition that it will print till < input

MOV BL,31H ; Initialize BL so that the output starts printing from 1 

MOV CL,Al ; set counter register CX 
MOV CH,00


Print:

MOV AH, 2    ; for output printing
MOV DL,0DH  ; for output printing
INT 21H      ; for output printing

MOV DL,0AH      ; for output printing
INT 21H            ; for output printing

MOV AH,2
MOV DL,BL         ; print what is in BL 
INT 21H

INC BL             ; then increment BL

LOOP Print     ; supposed to run the loop on Print what is the value in CL times

hlt

标签: loopsassemblyemu8086

解决方案


MOV AH, 1  ; Get user input 
INT 21H

如果您输入5,那么AL寄存器将保存数字 35h,这是该键的 ASCII 码。你显然想要那个键代表的是 5。你需要减去 30h (48)。

mov     ah, 01h  ; DOS.GetKey 
int     21h
sub     al, '0'
dec     al
mov     cl, al
mov     ch, 0

程序的其余部分适用于从 1 到 < 输入的打印。


推荐阅读