使用LDS和LES指令

时间:2014-11-13 17:21:56

标签: assembly

所以,我接受了以下练习&#34 ;;使用远;地址(32位地址)修改内存中两个单词的内容。提示:使用LDS和LES指令。"

当我运行下面的代码时,我收到以下错误:"无法使用当前假设的段寄存器"进行寻址。能否请您解释一下这个错误意味着什么以及如何正确编写程序?

_DATA SEGMENT PUBLIC 'DATA'
X   DW  10
Y   DW  15
ADR_X   DD  X
ADR_Y   DD  Y

_DATA ENDS

_CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS: _CODE

START   PROC    FAR

PUSH    DS
XOR AX, AX
MOV AX, _DATA  ; initializing the segment register
MOV DS, AX

LDS SI,ADR_X
LES DI,ADR_Y

MOV WORD PTR[SI],20
MOV WORD PTR ES:[DI],30

RET
START ENDP
_CODE ENDS

END START

1 个答案:

答案 0 :(得分:0)

用于支持16位实模式的msdos或dos控制台窗口的示例微软样式代码

dgroup  group   _data,_bss,stack
_data   segment public 'data'
x       dw      10
y       dw      15
adr_x   dd      x
adr_y   dd      y
_data   ends
_bss    segment public 'bss'
_bss    ends
stack   segment stack 'stack'
        dw      2048 dup (?)            ; stack
stack   ends
_text   segment para public 'code'
        assume  cs:_text,ds:dgroup,es:nothing,ss:dgroup
start   proc    far
        mov     ax,_data                ; init ds
        mov     ds,ax
        les     di,adr_y                ; get addresses
        lds     si,adr_x
        mov     word ptr ds:[si],20     ; set values
        mov     word ptr es:[di],30
        mov     ax,04c00h               ; exit to dos
        int     21h
start   endp
_text   ends
        end     start