使用emu8086编写一个汇编程序,含有一个宏指令“move doprnd, soprnd”,宏指令实现以下六种寻址方式(立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、相对寻址、基址变址寻址)的字量源操作数送到目的存储字单元。例如:move buf, array[si]
时间: 2023-07-10 12:23:37 浏览: 108
好的,以下是一个使用emu8086编写的汇编程序,其中包含一个宏指令“move doprnd, soprnd”,实现六种寻址方式的字量源操作数送到目的存储字单元。
```
.model small
.stack 100h
.data
array db 10, 20, 30, 40, 50
buf db 0
offsetval dw 2
baseval dw 100
.code
main proc
mov ax, @data
mov ds, ax
; 立即数寻址
move buf, 10
; 寄存器寻址
move al, 20
move buf, al
; 直接寻址
move buf, array
; 寄存器间接寻址
mov si, offsetval
move al, [si+array]
move buf, al
; 相对寻址
move al, [array+2]
move buf, al
; 基址变址寻址
mov bx, baseval
move al, [bx+offsetval]
move buf, al
mov ah, 4ch
int 21h
main endp
move macro doprnd, soprnd
; 立即数寻址
IF TYPE(soprnd) == 1
mov doprnd, soprnd
; 寄存器寻址
ELSEIF TYPE(soprnd) == 2
mov al, soprnd
mov doprnd, al
; 直接寻址
ELSEIF TYPE(soprnd) == 3
mov al, [soprnd]
mov doprnd, al
; 寄存器间接寻址
ELSEIF TYPE(soprnd) == 4
mov si, soprnd
mov al, [si]
mov doprnd, al
; 相对寻址
ELSEIF TYPE(soprnd) == 5
mov al, [soprnd]
mov doprnd, al
; 基址变址寻址
ELSEIF TYPE(soprnd) == 6
mov bx, soprnd
mov al, [bx]
mov doprnd, al
ENDIF
endm
end main
```
在这个程序中,我们定义了一个名为“move”的宏指令,它接受两个操作数:目的操作数(doprnd)和源操作数(soprnd)。根据源操作数的类型,宏指令使用不同的寻址方式将源操作数中的字送到目的存储字单元中。最后,我们在main过程中演示了如何使用这个宏指令来实现六种寻址方式的字量源操作数送到目的存储字单元。
阅读全文