鱼C论坛

 找回密码
 立即注册
查看: 4870|回复: 3

[学习笔记] 《零基础入门学习汇编语言》第十九讲和检测点3.2

[复制链接]
发表于 2017-6-29 22:10:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2017-6-29 22:21 编辑

小白刚学,不对的请各位大佬指正,谢谢

由于鱼C论坛的回档,我昨天的笔记消失了.... 所以今天先补回昨天的两个笔记。

一、栈段
(1)可以将长度为 N(N ≤64K )的一组地址连续、起始地址为16的倍数的内存单元,当作栈来用,从而定义了一个栈段。比如我们将10010H~1001FH 这段长度为 16 字节的内存空间当作栈来用,以栈的方式进行访问。这段空间就可以成为栈段,段地址为1000H,大小为16字节。
(2)如果我们将10000H~1FFFFH这段空间当作栈段,初始状态是空的,此时,SS=1000H,SP=?栈为空,就相当于栈中唯一的元素出栈,出栈后,SP=SP+2。SP原来为FFFEH,加2后SP=10000,超出内存容量了,所以sp=0H,当栈为空的时候,SS=1000H,SP=0
(3)一个栈段最大可以设为多少?为什么?
因为8086cpu为16位的,故2的16次方,栈顶的变化范围是0~FFFFH,从栈空时候的SP=0,一直压栈,直到栈满时SP=0;如果再次压栈,栈顶将环绕,覆盖了原来栈中的内容。所以一个栈段的容量最大为64KB。


二、总结
(1)我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。这完全是我们自己的安排。
我们可以用一个段存放数据,将它定义为“数据段”;
我们可以用一个段存放代码,将它定义为“代码段”;
我们可以用一个段当作栈,将它定义为“栈段”;
(2)不管我们如何安排 ,CPU 将内存中的某段内存当作代码 ,是因为CS:IP指向了那里;CPU将某段内存当作栈 ,是因为 SS:IP 指向了那里。
(3)一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。

检测点3.2

(1)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。

mov ax,1000H  

mov ds,ax                           

mov ax,2000H                        由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡。
————
mov ss,ax
————
mov sp,0010H                        指向栈的最底部单元下面的单元,因为运行时sp要-2,所以会写入2000FH中
————

push [0]  
push [2]  
push [4]  
push [6]  
push [8]  
push [A]  
push [C]  
push [E]  


(2)补全下面的程序,使其可以将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。  

mov ax,2000H  

mov ds,ax  

mov ax,1000H                        由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡。
————

mov ss,ax
————

mov sp,0                                指向栈的最顶部单元,因为运行时sp要+2,所以会写入2000FH中.
————

pop [e]  
pop [c]  
pop [a]  
pop [8]  
pop [6]  
pop [4]  
pop [2]  
pop [0]  




谢谢小甲鱼带来的视频教程,感谢!!


   
本节结束,多谢览阅!
小白刚学,不对的请各位大佬指正,谢谢

评分

参与人数 2荣誉 +4 鱼币 +4 收起 理由
lhq890223 + 4
小甲鱼 + 4 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 18:53:06 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-17 08:10:35 | 显示全部楼层
mov ax,1000H                        由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡。
————

mov ss,ax
————

mov sp,0                                指向栈的最顶部单元,因为运行时sp要+2,所以会写入2000FH中.   这个2000f中是否应该改为1000f sp指向0E然后sp才变为0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-14 15:52:57 | 显示全部楼层
mov ax,1000H                        由于不能直接把数据传输到段寄存器,所以要用通用寄存器作为过渡。
————

mov ss,ax
————

mov sp,0                                指向栈的最顶部单元,因为运行时sp要+2,所以会写入2000FH中.   

这一句搞不明白   sp的值是0000H    不是声明这个栈是空的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表