内存中的字
字单元:即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
-2025-10-22-19-28-23.png)
- 20H
- 4E20H
- 12H
- 0012H
- 124EH
DS和[address]
DS—数据段寄存器:提供数据所在内存的段地址。
[address]:表示一个偏移地址为address的内存单元。
例:[1234H]指偏移地址为1234H的内存单元。
1 | MOV BX, 1000H |
读取10000H地址数据写入AL
CS只能作为源操作数
判断下列指令是否正确,若错误,为什么?
MOV CL,1000H:CL是 8 位寄存器,而1000H是 16 位立即数MOV AL,[1000H]:需确保DS已正确初始化MOV [BX],[SI]:8086 汇编不允许两个内存单元直接传送数据MOV AH,BHMOV AX,[SI]MOV 1234H,BX:目的操作数必须是寄存器或可寻址的内存单元,而1234H是立即数MOV CL,AX:CL是 8 位寄存器,AX是 16 位寄存器MOV CS,AX:不允许直接用MOV指令修改CS的值MOV DS,CS
字的传送
当向内存单元中存取数据时,若操作的为字节型数据则一次读写一个内存单元,若为字型数据则按低地址为低8位,高地址为高8位的原则存取数据
MOV、ADD、SUB指令
指令: 操作码+操作数
CPU提供的栈机制,PUSH,POP指令
PUSH OP和POP OP
执行PUSH、POP指令时,CPU如何找到要操作的位置?
CPU进行堆栈操作—SS:SP
SS—堆栈段寄存器:指定堆栈段的段地址
SP—堆栈指针寄存器:指向栈顶的偏移地址
任意时刻,SS:SP指向栈顶地址。
栈顶超界的问题
在8086CPU中没有预防栈超界的机制,所以程序员必须自己考虑,防止栈超界。
PUSH、POP指令
题目一
将10000H—1000FH这段空间当作栈,初始状态栈是空的,将AX,BX,DS中的数据入栈。
1 | MOV AX,1000H |
题目二
- 将10000H—1000FH这段空间当作栈,初始状态是空的;
- 设置AX=001AH,BX=001BH;
- 将AX,BX中的数据入栈;
- 然后将AX、BX清零;
- 从栈中恢复AX、BX原来的内容;
1 | MOV AX,1000H |
- 将10000H—1000FH这段空间作栈,初始状态栈是空的
- 设置AX=002AH,BX=002BH;
- 利用栈,交换AX和BX中的数据。
1 | MOV AX,1000H |
题目三
如果要将10000H处写入字型数据2266H,可以用以下指令完成:
1 | MOV AX,1000H |
补全下面的代码,使它能够完成同样的功能:
1 | ———————— |
1 | MOV AX,1000H |
栈段
分析:如果我们将10000H—1FFFFH这段空间作栈段,初始状态栈是空的,此时SS=1000H,SP=?一个栈段最大可以设为多少?
SP=0000H,栈段216字节