幼稚鬼0812 发表于 2020-10-21 21:11:46

大三汇编题目,用MASM32尝试编译出错,请教如何改正这些错误

题目:查表求0-15的平方值。
         
          表:0、1、4、9、16、25、36、49、64、81、100、121、144、169、196、225


代码:
DATA SEGMENT
X DB ?
TABLE DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TABLE
MOV AL,X
MOV AX,0
ADD BX,AX
MOV Y,
MOV AH,4CH
INT 21H
CODE ENDS
END

点击assumble ASM file之后出现两个错误分别是:

D:\资料\MASM32\自学\test.asm(14) : error A2070: invalid instruction operands
D:\资料\MASM32\自学\test.asm(8) : error A2004: symbol type conflict

请问该如何改正呢?

xieglt 发表于 2020-10-21 21:51:20

16位汇编请用masm编译,不要用MASM32
另外
MOV AL,X
MOV AX,0
ADD BX,AX
MOV Y,
改成
MOV AL,X
MOV AH,0   
ADD BX,AX
MOV AX,
MOVY,AX

幼稚鬼0812 发表于 2020-10-21 22:08:04

xieglt 发表于 2020-10-21 21:51
16位汇编请用masm编译,不要用MASM32
另外
MOV AL,X


感谢解答。请问MASM和MASM32有什么区别呀。

xieglt 发表于 2020-10-22 08:53:00

幼稚鬼0812 发表于 2020-10-21 22:08
感谢解答。请问MASM和MASM32有什么区别呀。

简单点说,
如果你写的是DOS下的运行的程序,请用MASM
如果你写的是WINDOWS下运行的程序,请用MASM32

复杂点说,DOS系统是16位的,只支持16位寄存器,如AX,BX,CX,DX等等
只能访问16位的内存,即 2的16次方,65536字节,也就是64K
但是,16位下有段寄存器,结合段寄存器CS,DS,ES,SS, 就能访问1M内存。

windows系统是32位的,支持32位的寄存器,如eax,ebx,ecx,edx 等等
可以访问32位的内存,即2的32次访,4GB。
而且,32位下的内存模式是平坦模式,不需要段寄存器。

幼稚鬼0812 发表于 2020-10-22 11:44:33

十分感谢讲解!
页: [1]
查看完整版本: 大三汇编题目,用MASM32尝试编译出错,请教如何改正这些错误