所以,我接受了以下练习&#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
答案 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