assembly - INT 10H 功能 06H 移动光标
问题描述
我在上运行以下汇编代码(emu8086)
:
clearScr macro
mov ah, 06h
mov al, 00h
mov bh, 71h
mov cx, 0000h
mov dx, 184fh
int 10h
clearScr endm
print macro string
mov ah, 09h
lea dx, string
int 21h
print endm
.model small
.stack 100h
.data
msg db 'Hello, world!', '$'
nl db 0AH, 0DH, '$'
myname db 'Ahmed', '$'
.code
main proc
mov ax, @data
mov ds, ax
print myname
clearScr
print msg
mov ax, 4c00h
int 21h
main endp
并且clearScr
宏似乎正在移动光标,因为屏幕上打印的最终文本不是从角落开始的。
为什么会这样?我不想设置/移动光标。
解决方案
并且
clearScr
宏似乎正在移动光标
恰恰相反:
clearScr
没有移动光标,但您希望它被移动。
会发生以下情况:
print myname
将移动光标;光标将不再位于左上角,而是位于您姓名的末尾。- 如果我理解正确,
clearScr
会清屏但不会改变光标位置;这意味着光标将保持在它之后的位置print myname
print msg
在打印消息之前也不会更改光标位置,因此消息将打印到光标所在的位置print myname
如果要清除屏幕并将光标移动到角落,则必须执行两个步骤:
- 清除屏幕(这不会将光标移动到角落)
- 将光标移动到角落(例如使用
int 10h
functionAH=2
)
我看到你 print
Ahmed
,但你没有做 cr/lf 后记。
如果我理解正确,打印 CR/LF 会导致在清除屏幕后在第二行打印文本。
如果光标已经在顶行,则仅打印 CR 会将光标移动到左上角。
推荐阅读
- mysql - 在 bash 中找不到 mysql 命令
- php - 我应该将与任何单个子对象无关但与它们的“集合”相关的函数放在哪里?
- makefile - Makefile:模式规则中的参数化接收命令
- javascript - 找不到引用的模块(Javascript)
- html - Boostrap 4 布局
- java - 如何在 Eclipse 中创建 jsf 标记库描述符?
- facebook - Facebook Group API,成员无法检索数据
- webpack - 如何将带有 ace 编辑器的 AMD 定义转换为 webpack?
- angularjs - app.UseWindowsAzureActiveDirectoryBearerAuthentication 在从 ADAL 升级到 MSAL 后停止工作
- python - 在python中的单个单词列表中搜索多个单词字符串