汇编语言学习笔记3(王爽)
内存字的储存
一个字=两个字节,即一个字需要两个内存单元储存。高地址放高位字节,低地址放低位字节。8086CPU为16位结构,有16位数据线,一次性可传输16位数据,也就是说对内存一次性操作两内存单元即为一个字。
DS寄存器
DS寄存器通常用来存放CPU要访问数据的段地址,[...](eg:[0])表示内存单元的偏移地址。
mov bx,1000H
mov ds,bx
mov al, [0]
上面的3 条指令将1000:0中的数据读到al 中。
mov ds,bx
mov al, [0]
上面的3 条指令将1000:0中的数据读到al 中。
注意:8086CPU不支持将数据直接送入寄存器。
SS、SP寄存器
CPU栈机制:一段以栈方式访问的内存单元(先进后出),在任意时刻SS:SP指向栈顶元素。SS:SP指向的元素是在栈中的(用来判断空栈SP值)!
入栈和出栈指令:push ax (SP=SP-2,将ax中数据送入栈中) pop ax(出栈一次送入ax中,SP=SP+2)push和pop等栈操作指令修改的只是SP,所以栈顶变化范围最大是0~FFFFH
小问题:
(1) 将 10000H-10000FH 这段空间当作栈, 初始状态栈是空的;
(2)设置 AX=001AH, BX=001BH;
(3)将 AX、 BX中的数据入栈;
(2)设置 AX=001AH, BX=001BH;
(3)将 AX、 BX中的数据入栈;
写下汇编指令画出内存状态图
注意一下内存图:涉及要点一次操作一个字,高位和低位摆放,先进后出原则
实验
相关指令:-d 段寄存器:偏移地址来查看内存、如-d ds:0、-d cs:0。
一个简单的汇编程序:
assume cs:codesg
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
codesg segment
mov ax,0123H
mov bx,0456H
add ax,bx
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
汇编源程序包涵两种指令:汇编指令、伪指令。汇编指令是有对应的机器码的指令, 可以被编译为机器指令, 最终为CPU所执行。 而伪指令没有对 应的机器指令,最终不被CPU所执行。 伪指令是由编译器来执行。
一:1、xxxx segment 2、 xxxx ends(定义一个段名字为xxxx、从1开始从2结束)
二:end汇编结束标志
三:assume 将特定用途段与相关联段寄存器关联
以上是伪指令
mov ax,4c00H
int 21H
int 21H
这两段是程序返回指令
编译:masm、连接:link