Assembly 我使用的模拟器(emu8086)无法识别MOVZX指令
我不知道为什么emu8086不能识别movezx指令,很抱歉,我是新装配的。谢谢你的帮助Assembly 我使用的模拟器(emu8086)无法识别MOVZX指令,assembly,Assembly,我不知道为什么emu8086不能识别movezx指令,很抱歉,我是新装配的。谢谢你的帮助 .MODEL SMALL .STACK 64 ;-------------------------- .DATA TOPROW EQU 08 BOTROW EQU 15 LEFTCOL EQU 26 ATTRIB DB ? ROW DB 00 SHADOW DB 19 DUP(0DBH) MENU DB 0C9H, 17 DUP(OCDH), 0BBH DB 0BAH, '
.MODEL SMALL
.STACK 64
;--------------------------
.DATA
TOPROW EQU 08
BOTROW EQU 15
LEFTCOL EQU 26
ATTRIB DB ?
ROW DB 00
SHADOW DB 19 DUP(0DBH)
MENU DB 0C9H, 17 DUP(OCDH), 0BBH
DB 0BAH, 'Add records '
DB 0BAH, ' Delete records '
DB 0BAH, ' Enter Orders '
DB 0BAH, ' Print Report '
DB 0BAH, ' Update accounts '
DB 0BAH, ' View records '
DB 0C8H, 17 DUP(OCDH),0BCH
PROMPT DB ' To select an item, use <Up/Down Arrow>'
DB ' and press <Enter> '
DB 13, 10 ' Press <Esc> to exit. '
;---------------------------
.CODE
A10MAIN PROC FAR
MOV AX,@data
MOV DS,AX
MOV ES,AX
CALL Q10CLEAR
MOV ROW,BOTROW+4
A20:
CALL B10MENU
MOV ROW,TOPROW+1
MOV ATTRIB 16H
CALL D10DISPLAY
CALL C10INPUT
CMP AL,1BH
JNE A20
MOV AX,0600H
CALL Q10CLEAR
MOV AX,4C00H
INT 21H
A10MAIN ENDP
;Display shadow box, next menu on top, then prompt
;--------------------------------------------------
B10MENU PROC NEAR
PUSHA
MOV AX,1301H
MOV BX,0060H
LEA BP,SHADOW
MOV CX,19
MOV DH,TOPROW+1
MOV DL,LEFTCOL+1
B20: INT 10H
INC DH
CMP DH,BOTROW+2
JNE B20
MOV ATTRIB,71H
MOV AX,1300H
MOVZX BX,ATTRIB
LEA BP,PROMPT
这是Peter Abel的书《IBM PC汇编语言与编程第5版》中未完成的代码。8086上不存在MOVZX指令。它是在80386中添加的。8086上不存在MOVZX指令。它是在80386中添加的。在此上下文中,MOVZX通过零扩展将字节值移动到字寄存器中,即将字的高半部设置为零。这相当于移动到BL,然后将BH归零3月13日黄昏5:39 而不是
MOVZX BX, ATTRIB
类型
或
在此上下文中,MOVZX通过零扩展将字节值移动到字寄存器中,即将字的高半部设置为零。这相当于移动到BL,然后将BH归零3月13日黄昏5:39 而不是
MOVZX BX, ATTRIB
类型
或
代码来自第10章图10-2这里没有问题…有一个链接可以回答这个问题:The。代码来自第10章图10-2这里没有问题…有一个链接可以回答这个问题:The。这意味着我需要使用80386仿真器,以便我可以使用MOVZX指令?正确;或者使用8086支持的另一个指令序列。你能帮我一下吗?我似乎不知道该使用什么指令序列。。我对装配的了解还不够。提前谢谢!在此上下文中,MOVZX通过零扩展将字节值移动到字寄存器中,即将字的高半部设置为零。这相当于移动到BL,然后将BH归零。这意味着我需要使用80386仿真器,以便使用MOVZX指令?正确;或者使用8086支持的另一个指令序列。你能帮我一下吗?我似乎不知道该使用什么指令序列。。我对装配的了解还不够。提前谢谢!在此上下文中,MOVZX通过零扩展将字节值移动到字寄存器中,即将字的高半部设置为零。这相当于移动到BL,然后将BH归零。注意:它避免了Intel CPU上的部分寄存器暂停,以及其他CPU上对旧的BX值的错误依赖。@PeterCordes会这样做吗?我不认为xor bx,bx可以破坏依赖关系,因为它只是一个16位的操作,不会影响整个32位寄存器。@RossRidge:哦,好的,它不能避免CPU上不重命名部分寄存器的错误依赖关系。在CPU上写入BL后读取BX可以避免部分reg合并减速。P6家族和SnB/IvB。Haswell和后来重命名了部分regs,但没有任何合并惩罚。注意:它避免了Intel CPU上的部分寄存器暂停,以及其他CPU上对旧值BX的错误依赖。@PeterCordes会这样做吗?我不认为xor bx,bx可以破坏依赖关系,因为它只是一个16位的操作,不会影响整个32位寄存器。@RossRidge:哦,好的,它不能避免CPU上不重命名部分寄存器的错误依赖关系。在CPU上写入BL后读取BX可以避免部分reg合并减速。P6家族和SnB/IvB。Haswell和后来重命名了部分regs,但根本没有合并惩罚。
mov bl, ATTRIB
mov bh, 00