本节内容:立即寻址方式的操作数包含在指令中,作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数。
■立即寻址方式的实现:8086计算机中,立即数可以是8位,也可以是16位。按照高高低低的原则存放在内存代码段。
■例1:立即数——源程序imaddr.asm。
7.1.1 立即寻址方式的实现
8086计算机中,立即数可以是8位,也可以是16位。按照高高低低的原则存放。
举例
mov ax,1234h ;将立即数1234h存储到ax寄存器中。
如图7-1所示,mov ax,1234h汇编指令对应的硬编码为B83412,存储在内存中的代码段。
图7-1 立即寻址方式
如图7-2所示,在debug调试器中演示立即寻址方式的实现。运行debug后,输入a命令,接着输入mov ax,1234h汇编指令,两次回车后,输入u命令,观察反汇编代码。在代码段073f:0100地址处存储mov ax,1234h汇编指令的硬编码B83412H。
图7-2 演示立即寻址方式
立即寻址方式主要用于给寄存器赋初始值。
7.1.2 例1:立即数
举例说明:立即数是存放在哪里的?
仔细观察下面imaddr.asm源程序的代码和注释。
示例代码1:
;程序名:imaddr.asm
;假设此程序的代码段标号为code,数据段标号为data。
;演示立即寻址方式
;==============================================
assume cs:code,ds:data
x = 1234H ;符号x等于1234H
y EQU 1234H ;符号y等于1234H
;数据段的定义
data segment
z dw 1234h ;变量地址标号z处,以dw为单位分配两个字节空间,并初始化为 1234h。
char db "423423" ;地址标号char处以db为单位分配6个字节空间,并初始化为"423423"。
data ends
;代码段的定义
code segment
start:
;将data段值赋给ds数据段
mov ax,data
mov ds,ax
;
mov ax,x ;编译时将符号x替换为1234H,立即数在代码段的指令代码中
mov bx,y ;编译时将符号y替换为1234H,立即数在代码段的指令代码中
mov cx,z ;执行时将变量地址标号z处存储的值1234H送入cx寄存器,立即数在数
;据段。
; 调用DOS系统4CH号功能,退出程序
mov ax,4c00h
int 21h
code ends
end start ;start为代码段的起始地址
请读者debug调试器内测试上述程序,使用‘U’命令观察反汇编代码中的立即数。
本文摘自编程达人系列教材《X86汇编语言基础教程》。