一段汇编改错

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:37:03
.model small
.stack 64
.data
data1 db 25
data2 db 280 ;1:value out of range
data3 dw ?
.code
main proc
mov ax,data ;2:improper operand type
mov ds,ax
mov ax,data1 ;3:operand types must match
mov ax,data2 ;4:operand types must match
mov data3,ax
mov ax,4c00h
int 21h
main endp
end main

关于第二个的问题,希望能详细说明一下,谢谢

model small
.stack 64
.data
data1 db 25
data2 dw 280 ;db的意思是开辟一个字节的空间,一个字节最大也只是255,所以存储280需要用dw来定义一个字的空间
data3 dw ?
.code
main proc
mov ax,@data ;没什么可说的,与'SEGMENT'伪指令不同,'.data'是预定义的简化段定义伪指令符号,对应的就要用预定义符号'@data'给出数据段的段名
mov ds,ax
mov al,data1 ;data1是一个字节,只能装入8位寄存器
mov ax,data2 ;data2改用dw定义后,这一行应该没问题了
mov data3,ax
mov ax,4c00h
int 21h
main endp
end main

1 是定义的是字节的类型的,字节的话是8位是一个字节。2的8次方是256.而你的是指是280.是用一个字节表示不了的。用字(DW)可以表示的。
2 因为的你错误的定义的data之中的数据data2,才会有这样的问题吧。你可以把data2改成dw的试一下。
3和4 都是应为你的定义的data1和data2数据的类型是字节的。和ax--双字节是不匹配的。也就是说要是双字节都是双字节。

可以加 BYTE PTR 或 WORD PTR进行强制类型转换,然后取来的数据是高对高低对低

可以改成MOV AX, WORD PTR DATA1

哇。高手很多