loops - 在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
解决方案
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 到 < 输入的打印。
推荐阅读
- html - Xamarin 中的 Razor 模板
- html - 从外部样式表调用时未应用 CSS
- apache-beam - Apache Beam ValueProvider 的 Python 类型提示
- shell - 在两个单词之间应用最长的空格不起作用
- ios - 从 SwiftUI 中的异步线程返回值以与 fileExporter 一起使用
- flutter - 由于底部导航栏和标签栏导致底部溢出
- reactjs - 如何显示/隐藏使用材料-ui
- android - AudioManager - 有没有办法获得相关的音频流?
- angular - 被 ngModel 覆盖的单选按钮选中
- postgresql - 在 api 响应中返回 postgres 错误