【问题标题】:How to use LES in assembly language?如何在汇编语言中使用 LES?
【发布时间】:2020-05-16 13:23:38
【问题描述】:

我必须创建 COM 文件并在那里使用 LES。我没有找到任何使用 LES 的示例,只有这个。 并且字符串LES BX, VIDEO中有错误"operand types do not match" 我该怎么办?我想我们可以为 LES 使用寄存器 bx。

.model  tiny
.code
ORG 100h
start:                                 
LES BX, VIDEO ; ES = B800h (memory VGA), BX = 72Eh      
MOV AX, 0         ; reset registers
MOV ES, AX        ; ES = 0
MOV BX, AX        ; BX = 0

MOV BX, VIDEO     ; analog of using LES
MOV ES, VIDEO+2   ; with using two commands MOV
                ; ES = B800h (memory VGA), BX = 72Eh
RET               ; exit

VIDEO DW 72Eh
DW 0B800h
END start

【问题讨论】:

  • 您使用哪种汇编程序?你想通过les 指令实现什么目标?
  • 你用的是什么汇编程序?马斯姆?塔斯马?别的东西?什么版本?

标签: assembly dos x86-16


【解决方案1】:

LES 指令与 dword 内存操作数一起使用。您的指令 LES BX, VIDEO 指的是 word 内存操作数,因为 VIDEO 后跟 DW(定义字)指令。这就是为什么您会收到错误“操作数类型不匹配”。

你可以改变这个:

VIDEO DW 72Eh
      DW 0B800h

进入

VIDEO DD 0B800h:072Eh

当然还有下面的代码:

MOV AX, 0         ; reset registers
MOV ES, AX        ; ES = 0

将破坏您刚刚加载到ES 段寄存器中的内容!

【讨论】:

  • VIDEO DD 0B800h:072Eh 可能适用于 TASM,但我认为它不适用于某些版本的 MASM
  • 我记得更通用的方法是VIDEO LABEL DWORDDW 0b800hDW 72Eh
  • 哎呀,在我的最后一条评论中,我的偏移量和段颠倒了。应该是 DW 72Eh DW 0b800hDW 72Eh, 0b800h
猜你喜欢
  • 2012-01-08
  • 2011-05-11
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
相关资源
最近更新 更多