汇编学习--第二天
第三章 寄存器
3.4
问题3.5
检测点 3.1
(1)
mov ax,1 | |
mov ds,ax | |
mov ax,[0] | 2662h |
mov bx,[1] | e626h |
mov ax,bx | e626h |
mov ax,[0] | 2662h |
mov bx,[2] | d6e6h |
add ax,bx | fd48h |
add ax,[4] | 2c14h |
mov ax,0 | 0h |
mov al,[2] | 00e6h |
mov bx,0 | 0h |
mov bl,[c] | 0026h |
add al,bl | 000ch |
段地址:偏移地址只是表示物理地址的方式,我们查看数据地址只看 段地址*16+偏移地址 的结果,例如0110:0000和0000:1100就是同一地址,数据相同。
(2)
第一问:执行序列:
1)mov ax,6622h
2)jmp 0ff0:0100
3)mov ax,2000
4)mov ds,ax
5)mov ax,[8]
6)mov ax,[2]
第二问
(3)数据和地址有区别,程序(指令)是对8086CPU运行顺序的改变,数据是对地址中数据的改变,显著区别就是操作指令的不同。
3.6 栈
mov ax,0123h
push ax
mov bx,2266h
push bx
mov cx,1122h
push cx
pop ax
pop bx
pop cx
任意时刻,SS:SP指向栈顶元素
问题 3.6
因为在执行命令之前,SP=SP-2,第一次执行命令的栈顶位置在1000E==>SS:1000H SP=000EH
所以在第一次执行命令之前的位置在SP=SP+2==>SP:0010H
push先操作地址-2,再执行命令;pop先执行命令,再操作地址+2。
3.8 栈顶越界问题
问题 3.7
问题 3.8
mov ax,2000 mov ss,ax mov sp,10 mov ax,1a mov bx,1b push ax push bx mov ax,0 mov bx,0 pop bx pop ax
栈地址,段地址和内存地址不能使用同一地址,不然指令会是“乱指令”
???在问题3.12下讲栈段和数据段到同一地址,但是运行时出错。可能电脑问题,暂时放这。
猜测,应该是栈段和数据段同时使用同一地址,会出现“乱指令”
问题 3.9
实际上这里就是一个出栈问题,这里只要将上面代码AX,BX出栈顺序换一下就行。
mov ax,2000 mov ss,ax mov sp,10 mov ax,1a mov bx,1b push ax push bx mov ax,0 mov bx,0 pop ax pop bx
问题 3.10
把10000H处作为段空间就行
mov ax,1000 mov ss,ax mov sp,2
3.10 栈段
问题 3.11
10000H~1FFFFH为栈空间,和之前一样,第一条指令在SS:1000,SP:FFFEH==>SP = SP + 2----SP:0000H
问题 3.12
SP变化是在0000H~FFFFH,每个内存空间1B,总共16*16*16*16=65536B,也就是64KB
检测点 3.2
(1)
mov ax,2000H
mov ss,ax
mov sp,10H
(2)
mov ax,1000H
mov ss,ax
mov sp,0H
实验2
(2)
d ds:10 18 ;查看1000:0010~1000:0018中的内容
d cs:0 ;查看当前代码段中的指令代码
d ss:0 ;查看当前栈段中的内容
u cs:0 ;以汇编指令的形式,显示当前代码段中的代码
a ds:0 ;以汇编形式从1000:0开始的内存写入指令
1--(3)
Debug的T命令在执行修改寄存器SS指令之后,下一条指令也紧接着被执行,也就是不会再DOSBOX上显示
2.实验任务
(1)
代码存入之后,T指令执行,D指令查看内存就行
(2)
原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11038691.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php基础教程 第十一步 面向对象
- php基础教程 第十一步 面向对象补充
- Serverless|Framework——图文玩转 AWS Lambda
- C++入门指南及实战 第一步 概述及经典HelloWorld
- C++入门指南及实战 第二步 HelloWorld及扩展详解
- 依托于GitLab持续集成基础配置和使用
- C++入门指南及实战 第三步 基本变量
- 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
- FlexSDK工具包的介绍与编译使用
- 《零基础看得懂的C语言入门教程 》——(二)C语言没那么难简单开发带你了解流程
- Ansible自动化运维学习笔记5
- Ansible自动化运维学习笔记4
- 《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序
- Python自动化运维2
- AirTest 基本使用及框架浅剖析——五分钟上手制作游戏辅助