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 吧,要和前面的一致