汇编语言程序设计中,段寄存器的内容和偏移量合起来是内存地址,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言程序设计中,段寄存器的内容和偏移量合起来是内存地址,相关的知识,希望对你有一定的参考价值。
比如段寄存器是410,偏移量是567内存地址就是4667为什么不是段寄存器前两位留出来,最后一位当作内存地址第一位??就变成了004和667??这样不是能多出两位空间么?
首先,如下的讨论系基于8086/8088的:1,搞清段寄存器及通用寄存器的宽度
是16位,不是12位
2,搞清逻辑地址的生成规则及原因
逻辑地址=段地址<<4+偏移地址
地址总线带宽为20,非24,亦非32 参考技术A 逻辑地址由16位段地址和16位偏移地址组成:段地址是指每一段的起始地址(又称段基地址)的高四位十六进制数值,通常被保存在某个段寄存器中;偏移地址则是指在段内相对于段起始地址的偏移值。
所以算内存地址时:物理地址 = 段地址×10H + 偏移地址
即:410*10H+567H=4100H+567H=4667H
汇编语言 实验2
实验2
1、 debug的使用之 段寄存器的使用
-d 段寄存器:偏移地址 (偏移地址2)
查看从【段寄存器:偏移地址】开始到偏移地址2(默认128字节)的内存中的内容
示例:
-e 段寄存器:偏移地址 修改值
修改从【段寄存器:偏移地址】开始的内存中的内容
示例:
-u 段寄存器:偏移地址
显示从【段寄存器:偏移地址】开始的汇编指令
示例:
-a 段寄存器:偏移地址
从【段寄存器:偏移地址】开始写入指令
示例:
2、 实验任务
(1) 将程序段写入内存,填空,单步执行后对比结果,并分析
步骤:
l 使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操 作
l 使用 a 命令输入的 p74 指令
l 每一行指令单步调试,观察结果
填空结果:
分析原因:粗心,pop 指令后,FE+2=100,而不是10
(2) 将程序段写入内存,单步执行后思考比对结果
步骤:
l 使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分
l 单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值
我的理解:
前三行指令表明:
1.将2000H数值传入寄存器ax中
2.将寄存器ax的内容存入段寄存器ss中
3.将10H数值传入寄存器sp中
即修改栈顶指针的位置,留下一段空间作为栈使用
初始时,栈顶是20110H,栈底是20000H
经过我的观察,在涉及到修改栈寄存器ss的指令时,总是会自动执行下一步修改寄存器sp的值,可能这是一种简化的用法,使执行更方便
实验2——总结
我学到了:
栈机制,栈在内存中的存储,栈的实现:栈顶指针与栈底指针、两个栈的寄存器(段寄存器ss,寄存器sp)、push与pop操作以及操作过程中两个寄存器的内容是怎么变化的,栈顶超界的问题不会被检查出来。
我的感受:
栈是一个常用的结构,能方便地逆序存储数据、交换数据,其基本原理也对我们理解指针有重要帮助,好好掌握能使我们受益匪浅
---恢复内容结束---
以上是关于汇编语言程序设计中,段寄存器的内容和偏移量合起来是内存地址,的主要内容,如果未能解决你的问题,请参考以下文章