我正在使用的仿真器(emu8086)无法识别MOVZX指令

时间:2016-03-13 04:42:25

标签: 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, '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 ASSEMBLY LANGUAGE AND PROGRAMMING 5TH EDITION)

2 个答案:

答案 0 :(得分:2)

8086上没有MOVZX指令。它已在80386中添加。

答案 1 :(得分:1)

在此上下文中,MOVZX通过对其进行零扩展(即,将字的高半部分设置为零)将字节值移动到字寄存器中。这相当于转移到BL,然后归零BH。 - duskwuff 3月13日5:39

而不是

csv

MOVZX BX, ATTRIB

mov bh, 00
mov bl, ATTRIB