求高手改错data segmentvar1 db 0, 25, 0dh,300var2 db 12h,a4h,6bhvar3 db ABCDEFvar4 dw 1234h, 5678h
求高手改错
data segment
var1 db 0, 25, 0dh,300
var2 db 12h,a4h,6bh
var3 db 'ABCDEF'
var4 dw 1234h, 5678h
var5 dw 10h dup(?)
data ends
code segment
assume cs:code, de:data
begin mov ax, data
mov ds, ax
lea si, var5
mov bx, offset var2
mov [si], 0abh
mov ax, var1+2
mov [bx], [si]
mov var5+4, var4
mov ah, 4ch
int 21h
code ends
end start
[解决办法]
- Assembly code
data segmentvar1 db 0, 25, 0dh, 300 ; 300>255,超出了 db 的表示范围了var2 db 12h,0a4h,6bh ; a4h 前应加个 0 以表示其为一数值而非标号var3 db 'ABCDEF'var4 dw 1234h, 5678hvar5 dw 10h dup(?)data endscode segment assume cs:code, ds:data ; de 应该是 ds 吧begin: mov ax, data ; 标号后应有 : mov ds, ax lea si, var5 mov bx, offset var2 mov [si], 0abh ; 要加上 word ptr 或类似的修饰以指明操作数的大小 mov ax, var1+2 ; mov ax, var1[2] ? mov [bx], [si] ; 不能直接由内存到内存的赋值,且未知操作数大小 mov var5+4, var4 ; 不能由内存到内存的直接赋值,一般可通过个通用寄存器或堆栈来转储下 mov ah, 4ch int 21hcode ends end begin ; start 应该是 begin 吧,要和前面的一致
