【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第三章

第三章

内存中字的存储

* CPU中,用16位寄存器来存储一个字,一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。
* 字单元:存放一个字型数据(16位)的内存单元,有两个地址连续的内存单元组成。
* 任何两个地址连续的内存单元,N号单元和N+1号单元,我们可以将它们看作两个内存单元,也可以看成一个地址位N的字单元中的高位字节单元和地位字节单元。  

DS和[address]

* 8086CPU中有一个DS寄存器,通常用来存放要访问数据的段地址。比如我们要读取10000H单元的内容,可以用如下的程序段进行。  
	mov bx,1000H  
	mov ds,bx  
	mov a1,[0]  
上面的3条指令将10000H(1000:0)中的数据读到al中。  
* 当使用mov指令将一个内存单元中的内容送入一个寄存器中时,格式应该是:mov 寄存器名,内存单元地址。  
* “[...]”表示一个内存单元,0表示内存单元的偏移地址。  
* 因此,我们用mov指令从10000H中读取数据,则进行以下步骤:  
1.先将1000H放入DS  
2.用mov al,[0]完成传送,mov 指令中的[]说明操作对象是一个内存单元,0说明这个内存单元的偏移地址是0,它的段地址默认放在DS中。  
3.指令执行时,8086CPU会自动从DS中取出段地址  
* 8086CPU不支持将数据直接送入段寄存器,要使用mov先送入通用寄存器,再送入段寄存器。
    数据-->通用寄存器-->段寄存器  
* 将al中的数据送入内存单元10000H中:  
    mov bx,1000H
    mov ds,bx
	mov [0],al    

字的传送

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c9hvfUar-1583120291692)(字的传送1.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhQikkEw-1583120291695)(字的传送1.1.png)]
由于ax,bx,cx都是16位的寄存器,所以把内存中的数据当作字单元(两个字节)看待。

mov、add、sub指令

到目前为止知道的mov:  
mov 寄存器,数据		比如:mov ax,8  
mov 寄存器,寄存器 	比如:mov ax,bx  
mov 寄存器,内存单元	比如:mov ax,[0]  
mov 内存单元,寄存器	比如:mov [0],ax  
mov 段寄存器,寄存器	比如:mov ds,ax   
mov 寄存器,段寄存器	比如:mov ax,ds   
add和sub指令:  
add 寄存器,数据		比如:add ax,8  
add 寄存器,寄存器		比如:add ax,bx  
add 寄存器,内存单元	比如:add ax,[0]  
add 内存单元,寄存器	比如:add [0],ax  
sub 寄存器,数据		比如:sub ax,8  
sub 寄存器,寄存器		比如:sub ax,bx  
sub 寄存器,内存单元	比如:sub ax,[0]  
sub 内存单元,寄存器	比如:sub [0],ax   

无"add ds,ax"

数据段

根据需要,将一组内存单元定义位一个段,用来专门储存数据的内存空间,称为数据段。  

检测点3.1

(1)解答:  
将DS中的数据x16加上0000得到物理地址:00010,此物理地址可以拆分为多种可能,由题可知,拆分为0000:0010,答案既出。  
(2)解答:  
mov ax,6622H  ->  AX = 6622H  
jmp 0ff0:0100 ->  CS = 0FF0,IP = 0100  
mov ax,2000H  -> AX = 2000H   
mov ds,ax     ->  DS = 2000H  
mov ax,[0008] ->  AX = C389  
mov ax,[0002] -   AX = EA66

栈:一个容器,后进先出,像储存羽毛球的容器。  
基本操作:入栈和出栈

CPU提供的栈的机制

8086CPU提供入栈和出栈指令,最基本的两个是PUSH和POP。比如,push ax 表示将寄
存器ax中的数据送入栈中,pop ax 表示从栈顶取出数据送入ax。8086CPU的入栈和出
栈操作都是以字单位进行的。   
8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移
地址存放在SP中。任意时刻,SS:SP指向栈顶元素。push指令和pop指令执行时,CPU从
SS和SP中得到栈顶的地址。  

push具体操作过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GpTBNfBl-1583120291696)(push操作过程.png)]

pop具体操作过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfH3EubL-1583120291696)(pop操作过程.png)]

空栈情况:

假设10000H~1000FH这段空间为栈,当由一个元素时,SS = 1000H,SP = 000EH,所以当栈为空时:SS = 1000H,SP = 0010H。(栈中元素为字单元,所以一个元素相当于两个内存单元)

栈的越界问题

8086CPU并没有提示栈越界的操作机制,所以要我们自己注意栈越界的问题。

push、pop指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jTAJJED-1583120291697)(栈的编程.png)]

栈段

将一段内存当作栈来使用,以栈的方式进行访问,这段空间称为栈段。
一个栈段最大容量为64KB。

检测点3.2

(1)解答:  
mov ax,2000
mov ss,ax
mov sp,0010H  
(2)解答:  
mov ax,1000
mov ss,ax
mov sp,0000  

实验2 用机器指令和汇编指令编程

实验任务:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D3QeiTnf-1583120291697)(实验任务.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEBIlQyM-1583120291698)(实验2-1.png)]

ax = c0ea  
ax = c0fc  
bx = 30f0  
bx = 6021  

sp = 00fe   2200:00fe~2200:00ff c0fc  
sp = 00fc   2200:00fc~2200:00fd 6021   
sp = 00fe ax = 6021  
sp = 0100 bx = c0fc  

sp = 00fe 2200:00fe~2200:00ff 30f0  
sp = 00fc 2200:00fc~2200:00fd 2f31

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kzPvFgju-1583120291699)(实验任务2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amHXjhHE-1583120291700)(实验2-2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRKuRucJ-1583120291701)(实验2-3.png)]
解释:在我看来,cpu把要操作的寄存器的数值压栈后方便后续操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值