lm68140318 发表于 2023-8-1 14:44:33

cuowu1



;目的;将welcome to masm复制到段地址0B800h

assume cs:code,ds:data

data segment;数据段
db 'welcome to masm'
data ends

code segment
start:
                mov ax, 0B800h
      mov ds, ax
               
                mov es,data
               
                mov cx,15
               
      mov bx, 0
      s:mov al,es:   
          mov ds:,al
      inc bx
                loop s
               
                mov ax,4c00h
      int 21h
      
          
code ends
end start




我的问题:显示mov es,data    severe错误??

isdkz 发表于 2023-8-1 14:44:46

问题出在这一行代码:mov es, data

在MASM汇编语言中,要将一个段地址加载到寄存器中,需要使用SEG运算符。在这种情况下,您需要使用SEG data来将数据段的地址加载到ES寄存器中。因此,将这一行代码修改为mov es, SEG data即可解决问题。

修改后的代码如下:

;目的;将welcome to masm复制到段地址0B800h

assume cs:code, ds:data

data segment ;数据段
db 'welcome to masm'
data ends

code segment
start:
    mov ax, 0B800h
    mov ds, ax
   
    mov es, SEG data ; 使用SEG运算符加载数据段的地址到ES寄存器
   
    mov cx, 15
    mov bx, 0
s:
    mov al, es:   
    mov ds:, al
    inc bx
    loop s
   
    mov ax, 4c00h
    int 21h

code ends
end start


现在,您应该能够顺利地将字符串"welcome to masm"复制到段地址0B800h,实现显示的效果。

陶远航 发表于 2023-8-1 14:45:03

根据你提供的代码,你遇到了一个错误:mov es, data。实际上,在MASM中,你无法直接将一个标签(如data)赋值给一个段寄存器(如es)。相反,你需要使用指令mov ax, seg data和mov es, ax来加载段地址。

以下是修正后的代码:

assume cs:code, ds:data

data segment
    db 'welcome to masm'
data ends

code segment
start:
    mov ax, 0B800h
    mov ds, ax
    mov ax, seg data; 加载数据段地址到 AX
    mov es, ax      ; 将 AX 的值赋给 ES
    mov cx, 15
    xor bx, bx      ; 将 BX 清零

s:
    mov al, es:
    mov ds:, al
    inc bx
    loop s

    mov ah, 4Ch
    int 21h

code ends

end start


在修正后的代码中,我添加了两行指令mov ax, seg data和mov es, ax。这些指令将数据段的段地址加载到 AX 寄存器中,然后将 AX 的值赋给 ES 寄存器。现在,你可以正确地将数据从数据段复制到段地址 0B800h。

如果还有其他问题,请随时告诉我。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-8-1 14:45:14

汇编语言 - mov es, data 错误

在您的代码中,出现了mov es, data导致了严重错误。这是因为在汇编语言中,不能直接将数据段的段名(如data)赋值给段寄存器(如es)。需要使用一个寄存器作为中间步骤。

以下是修正后的代码:

assembly
assume cs:code, ds:data
data segment ; 数据段
    db 'welcome to masm'
data ends

code segment
start:
    mov ax, 0B800h ; 将段地址0B800H赋值给AX寄存器
    mov ds, ax ; 将AX中的值赋值给DS寄存器

    mov si, offset data ; 将数据段的偏移地址赋值给SI寄存器
    mov di, 0B800h ; 将段地址0B800H赋值给DI寄存器
    mov cx, 15 ; 设置循环次数

    s:
      mov al, ; 将SI指向的内存中的值赋值给AL寄存器
      mov , al ; 将AL寄存器中的值写入DI指向的内存中
      inc si ; 增加SI指针的值,指向下一个字符
      inc di ; 增加DI指针的值,指向下一个字符
      loop s ; 循环直到CX寄存器的值为零

    mov ax, 4c00h
    int 21h
code ends

end start


在修正后的代码中,我使用了两个新的寄存器:si和di。首先,将数据段的偏移地址赋值给si寄存器,然后将段地址0B800H赋值给di寄存器。接下来,使用和来访问内存中的值,并进行对应的读写操作。

希望以上回答能够解决您的问题!如果您还有其他疑问,请随时提出。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: cuowu1