当前位置: 代码迷 >> 汇编语言 >> 求好手改错
  详细解决方案

求好手改错

热度:2321   发布时间:2013-02-26 00:00:00.0
求高手改错
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 吧,要和前面的一致
  相关解决方案