编写一个宏指令“move doprnd, soprnd”,它实现以下六种寻址方式(立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、相对寻址、基址变址寻址)的字量源操作数送到目的存储字单元。例如:move buf, array[si]
时间: 2023-07-10 12:25:55 浏览: 238
arm寻址方式总结
好的,以下是宏指令的实现:
```
; 宏指令:move doprnd, soprnd
; 实现六种寻址方式的字量源操作数送到目的存储字单元
; 立即数寻址
%macro move_imm 2
mov %1, %2
%endmacro
; 寄存器寻址
%macro move_reg 2
mov %1, [%2]
%endmacro
; 直接寻址
%macro move_dir 2
mov %1, %2
mov %1, [%1]
%endmacro
; 寄存器间接寻址
%macro move_ind 2
mov %1, [%2]
mov %1, [%1]
%endmacro
; 相对寻址
%macro move_rel 3
mov %1, %2
add %1, %3
mov %1, [%1]
%endmacro
; 基址变址寻址
%macro move_idx 4
mov %1, [%2 + %3 * %4]
%endmacro
```
使用方法:
```
move_imm eax, 1234 ; 立即数寻址:将 1234 移动到 eax 寄存器
move_reg ebx, esi ; 寄存器寻址:将 esi 寄存器的值作为地址取出字节,存到 ebx 中
move_dir ecx, array ; 直接寻址:将 array 的地址存到 ecx 中,再取出该地址的字节存到 ecx 中
move_ind edx, esi ; 寄存器间接寻址:将 esi 寄存器的值作为地址取出字节,再将该字节作为地址取出字节存到 edx 中
move_rel edi, array, esi ; 相对寻址:将 array 的地址存到 edi 中,再将 esi 寄存器的值加到该地址上,取出该地址的字节存到 edi 中
move_idx ebp, array, esi, 4 ; 基址变址寻址:将 esi 寄存器的值乘以 4,加到 array 的地址上,取出该地址的字节存到 ebp 中
```
阅读全文