当前位置: 代码迷 >> 汇编语言 >> 求高手改错,该如何处理
  详细解决方案

求高手改错,该如何处理

热度:6941   发布时间: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

------解决方案--------------------------------------------------------
data segment
var1 db 0, 25, 0dh, 300 ; 300>255,超出了 db 的表示范围了
var2 db 12h,0a4h,6bh ; a4h 前应加个 0 以表示其为一数值而非标号
var3 db 'ABCDEF'
var4 dw 1234h, 5678h
var5 dw 10h dup(?)
data ends
code 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 21h
code ends
  end begin ; start 应该是 begin 吧,要和前面的一致
  相关解决方案