assembly - 如何在Assembly中使用for循环?
问题描述
我的任务是编写一个代码,根据用户输入输出等量的“Text Here”。但是,我似乎对我的 cmp 函数感到困惑。
;Get keyboard input
mov ah, 01h
int 21h
;Save to bl for later use
mov bl, al
jmp isa
isa:
mov ah, 09h
mov dx, offset text
int 21h
cmp bl, bl
jne isa
je exit
无论我输入什么数字,我用这段代码得到的只是“文本”的一个输出。
编辑:我试过了,但现在我的输出是无限的:(
isa:
inc bl
mov ah, 09h
mov dx, offset ulit
int 21h
cmp bl, 30h
jne isa
je exit
解决方案
首先,确保在开始循环之前将 BX 寄存器初始化为零:
...
xor bx,bx
isa:
...
为避免 DOS 中断覆盖您(使用的)BX 寄存器的内容,请将其保护在堆栈上(不确定 DOS 中断的调用约定,对我来说太久以前了):
...
push bx
int 21h
pop bx
推荐阅读
- swift - Swift 4.2 中的快速数组比较
- android - 在项目级词典中添加拼写错误词
- c# - C# 和 Microsoft.Office.Interop.Excel 查找与给定单元格合并的所有单元格
- python - 未指定目录时,patch 不适用于 pytest
- amazon-sagemaker - Sagemaker 中的培训作业在将 S3 中的文件定位到 docker 映像路径时出错
- c - 如何使用 SDL_LockTexture() 更新脏矩形?
- android - Google Admob Android:仅在一台设备上工作
- xcode - 如何从 watchkit 中的按钮打开下一页(组页)
- python - 检测 7 张扑克手牌中的顺子
- powershell - 如何让我的 windows conda 识别安装在 Ubuntu 中的 ANT?