【萌新求助】微机原理汇编语言教材示例程序错误

mittwyc 2018-11-10 10:36:33
教材ibm pc示例程序F8-2程序报错

报错内容:(50) illegal instruction: MOVZX BX,ACTULEN or wrong parameters.
报错部分代码: MOVZX BX,ACTULEN ;用07H替换0DH

试过将MOVZX改为MOV仍然报错
求大佬指点可行解决办法!!!非常感谢!!!!

所用的编译器:emu8086 version 4.08

完整程序代码如下:
     .MODEL SMALL
.STACK 64
.DATA
PARLIST LABEL BYTE;名字的参数表
MAXNLEN DB 20;名字的最大长度
ACTULEN DB 10 DUP(0);输入的字符数
KBNAME DB 21 DUP('');存入名字
PROMPT DB 'Name?','$'
;
.CODE
;.386;为MOVZX指令指定处理器
A10MAIN PROC FAR
MOV AX,@DATA;初始化段寄存器
MOV DS,AX
MOV ES,AX
CALL Q10CLEAR;清屏
A20:
MOV DX,0000;设置光标为00,00
CALL Q20CURSOR
CALL B10INPUT;用于输入名字
CALL Q10CLEAR;清屏
CMP ACTULEN,00;输入名字?
JE A30;否,则退出
CALL C10CENTER;设置响铃和'$'
CALL D10DISPLY;并在中央显示名字
JMP A20;重复
A30:
MOV AX,4C00H;处理结束
INT 21H
A10MAIN ENDP
;显示提示符并接收输入的名字:
;---------------------------
B10INPUT PROC NEAR
PUSH AX;保存要使用的
PUSH DX;寄存器
MOV AH,09H;请求显示用户提示符
LEA DX,PROMPT
INT 21H
MOV AH,0AH;请求键盘输入
LEA DX,PARLIST
INT 21H
POP DX;恢复寄存器
POP AX
RET
B10INPUT ENDP
;设置响铃符和'$'定界符
;在屏幕中央设置光标:
;----------------------
C10CENTER PROC NEAR;使用BX和DX
MOVZX BX,ACTULEN;用07H替换0DH **//此处报错**
MOV KBNAME[BX],07
MOV KBNAME[BX+1],'$';设置显示界定符
MOV DL,ACTULEN;定位中心位置的列
SHR DL,1;长度除2
NEG DL
ADD DL,40
MOV DH,12
CALL Q20CURSOR
C10CENTER ENDP
;显示中心位置的名字:
;-------------------
D10DISPLY PROC NEAR;使用AH和DX
MOV AH,09H
LEA DX,KBNAME;显示名字
INT 21H
RET
D10DISPLY ENDP
;清屏并设置属性:
;---------------
Q10CLEAR PROC NEAR
PUSHA;保存通用寄存器
MOV AX,0600H;请求卷屏
MOV BH,30;彩色属性
MOV CX,0000;从00,00
MOV DX,184FH;到24,79
POPA;恢复通用寄存器
INT 10H
RET
Q10CLEAR ENDP
;设置光标的行列:
;---------------
;DX已输入数据
Q20CURSOR PROC NEAR;使用AH和BH
MOV AH,02H;请求设置光标
MOV BH,00;页号0
INT 10H
RET
Q20CURSOR ENDP
END A10MAIN
...全文
168 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2018-11-12
  • 打赏
  • 举报
回复
恢复那个被你注释了的 .386 语句应该可以吧,如果还是不行,那你的编译器该换了。
如果一定要用 MOV 来代替,应该是:
mov BL, ACTULEN
mov BH, 0

才能替代 movzx bx, ACTULEN 吧

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧