汇编语言(王爽)段,栈,数据段,代码段的理解

  • 误区:很多人容易将“段地址”理解为内存被分为一个一个的段,每一个段都有一个段地址
  • 正解:内存并没有分段,段的划分来自于CPU,因为8086CPU用“基础地址(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址,所以我们可以用分段的方式来管理内存。比如地址10000H~100FFH的内存单元组成一个段,改段的初始地址为10000H(基础地址),则段地址为1000H,大小为100H。我们也可以将这一内存单元分成两个段,它们的初始地址分别为10000H和10080H,段地址为1000H和1008H,大小都为80H
  • 而用来存储每个段的段地址的寄存器,就称之为段寄存器,段寄存器有CS,DS,SS,ES

  • 栈在汇编语言中,我们仅限于这个角度去理解使用:栈是一种具有特殊的访问方式的存储空间,也就是说,栈,就是内存中的一段空间,那么栈特殊在什么地方,即先进入这个空间(栈)的数据,最后出去,最后进入这个空间的数据,最先出去,比方说,有一个盒子,用来装书本,那么最先放进去的书本就位于这个盒子的最低端,最后放进去的盒子就位于最上方,我们在取书的时候,自然就是先拿出最上方的书籍,才能够拿到最下方的书籍。而栈,就相当于用来存放书籍的盒子,书籍,就是栈中的数据。
  • 操作栈:
    CPU提供的操作栈的指令有push(入栈指令)和pop(出栈指令)

代码段,栈段,数据段

根据段的含义,代码段,数据段,栈段的理解很简单,即:

  • 用一个段来存放数据,则称之为数据段
  • 用一个段来存放代码,则称之为代码段
  • 用一个段当做栈,则称之为栈段

让我们总结一下

名称通俗理解
内存上的一段连续的内存单元,段地址用段寄存器存放
一种具有特殊的访问方式的存储空间
数据段用来存放数据的段,就是用一段连续的内存单元存放数据
代码段用来存放代码的段,不多说了,同上
栈段同上理解

这里强调一下,段,栈,数据段,代码段,栈段使我们根据需要定义的一段连续的内存单元,注意,是连续的内存单元,抽象一点,就是1~5可以视作一个段,但是1,2,3,5不能视作一个段,因为中间断开了4,这一段数字不连续

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的汇编语言程序,实现了将一个字节的数转化为两个十六进制的ASCII码的功能。请注意,这只是一个示例代码,您需要根据实验要求和自己的理解进行修改和完善。另外,由于不同的汇编语言编译器可能存在差异,以下代码可能不适用于所有的编译器,您需要根据自己使用的编译器进行相应的修改。 ``` ; 实验九:调用子程序的实现 ; 将一个字节的数转化为两个十六进制的ASCII码 .model small .stack 100h .data msg db "请输入一个字节的数:$" res db "结果为:$" num db ? hex1 db ? hex2 db ? .code main proc mov ax, @data mov ds, ax ; 输出提示信息 mov ah, 09h lea dx, msg int 21h ; 输入一个字节的数 mov ah, 01h int 21h mov num, al ; 调用子程序,将num转化为两个十六进制的ASCII码 push ax call convert add sp, 2 ; 输出结果 mov ah, 09h lea dx, res int 21h mov ah, 02h mov dl, hex1 int 21h mov dl, hex2 int 21h ; 程序结束 mov ah, 4ch int 21h main endp ; 子程序:将一个字节的数转化为两个十六进制的ASCII码 convert proc ; 将高四位转化为ASCII码 mov ah, num shr ah, 4 cmp ah, 0ah jl skip1 add ah, 37h jmp next1 skip1: add ah, 30h next1: mov hex1, ah ; 将低四位转化为ASCII码 mov ah, num and ah, 0fh cmp ah, 0ah jl skip2 add ah, 37h jmp next2 skip2: add ah, 30h next2: mov hex2, ah ; 子程序结束,返回主程序 ret convert endp end main ``` 希望这个示例代码可以对您有所帮助。如果您还有其他问题或需要进一步的帮助,请随时告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值