美文网首页
2021-05-17(汇编1)

2021-05-17(汇编1)

作者: x92n | 来源:发表于2022-06-19 17:50 被阅读0次

汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗﹖汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。这两个目的达到了,其他目的也就自然而然地达到了。举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解。

机器语言是机器指令的集合

书写和阅读机器码程序不是一件简单的工作。。。。

汇编指令方便阅读和记忆,例如机器指令1000100111011000表示把寄存器BX的内容送到AX中,汇编指令则写成 mov ax,bx

汇编语言的组成:

1.汇编指令:机器码的助记符,有对应的机器码

2.伪指令:没有对应的机器码,由编译器执行,计算机并不执行

3.其他一些符号:比如 + - * / 由编译器识别,没有对应的机器码

存储单元


2022-06-19_164934.png

大容量存储器计量单位:
KB、MB、GB

一个典型的CPU大概由运算器、控制器、寄存器构成。
外部总线实现CPU和主板上其他器件的联系。
内部总线实现CPU内部各个部件的链接

8086CPU有14个16位寄存器 AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

image.png

16位寄存器可以存储的最大的数为2的16次方-1
n位寄存器可以存储最大的数为2的n次方-1

AX、BX、CX、DX这4个通常用来存放一般性的数据,被称为通用寄存器

二进制数中低位在右边,高位在左边。

为了兼容上一代8位CPU,可分为2个8位寄存器使用:

AX可分为AH和AL BX   BX可分为BH和BL  CX分为CH和CL   DX分为DH和DL

8086cpu一次性处理2种尺寸数据:字节(byte) 字(word) 一个字等于两个字节

mov ax,18 将18送入寄存器AX AX = 18

mov ah,88 将88送入寄存器AH中 AH=88

add ax,8 AX = AX+8

mov ax,bx AX的值 = BX

add ax,bx ax = ax+bx

注意寄存器位数(源操作数和目的操作数位数要一致)

正确用法 不正确用法

mov bx,ax mov ax,bl

mov ax,18H mov al,20000

add ax,bx

add ax,2000


题目一、
程序段中的指令 指令执行后AX中的值 指令执行后BX中的值
mov ax,4E20H 4E20H 0000H
add ax,1406H 6226H 0000H
mov bx,2000H 6226H 2000H
add ax,bx 8226H 2000H
mov bx,ax 8226H 8226H
add ax,bx ? 8226H


一个16进制位是4个二进制位。

8086有20根总线,可以传送20位地址,寻址能力达到1MB,但是寄存器只有16位,所以采用2个16位地址合成的方法来形成20位地址

16位结构寻址 2^16 65536bit = 64kb


2022-06-19_172618.png

寻址123c8H的内存单元 地址加法器采用段地址 x 16 + 偏移地址的方法合成物理地址,其实就是用一个基础地址加上一个偏移地址

比如要表示一个4位数1023,但只有两个可以写3位数的纸条,我们可以在第一个纸条写100,第二个纸条写023,然后第一个100乘以10,加上023,就可以表示1023

编程的时候可以根据需要将若干地址连续的内存单元看做一个段,内存实际上并未分段,是8086CPU自己想出来的。偏移地址是16位,所以一个段的最大长度是64KB FFFF

段地址必须是16的倍数。


1.给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为_______到________。
2.有一段数据存放在内存20000H的单元中,现给定段地址为SA,若想用偏移地址去寻址到这个单元,则SA满足的条件
是:最小为________,最大为_____________


段寄存器提供段地址,8086CPU有4个段寄存器:CS DS SS ES

CS和IP它们指示了CPU当前要读取指令的地址,CS叫代码段寄存器,IP为指令指针寄存器。SS叫栈段寄存器,ES为附加段寄存器

在任意时刻,8086CPU将从CS的内容x16+ip的内容单元处开始读取一条指令执行

8086PC读取和执行指令的相关部件

CPU读取执行指令步骤:

1.从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器

2.IP = IP+读取的指令的长度,指向下一条指令

3.执行指令,执行完成转到步骤1,重复这个过程

8086CPU加电启动或复位后 CS和IP的值被设置为CS=FFFFH IP=0000H 开机后执行的第一条指令

改变cs:ip的指令 :jmp指令

同时修改cs和ip jmp 0fffh:0100h
仅仅修改ip内容,jmp,某个寄存器(mov ax,0fffh, jmp ax) jmp ax == mov ip,ax


作业
mov ax,bx
sub ax,ax
jmp ax
这3条指令执行后,CPU几次修改IP?都是在什么时候?,最后IP的值是多少


相关文章

  • 2021-05-17(汇编1)

    汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未...

  • 2,程序的机器级表示

    一, 编译使用命令 1, 汇编命令 2, intel 汇编指令 3, 反编译 命令 二, 汇编指令 1, mov...

  • 汇编程序基础

    汇编程序基础 一、汇编程序基本结构 二、汇编指令 1.汇编指令基本结构 三、伪指令 1.段定义 2.数据定义 数据...

  • 逆向 - arm64汇编 - 第一天

    1. 汇编语言种类 8086汇编(8086处理器是16bit的CPU)Win32汇编Win64汇编ARM汇编(嵌入...

  • lab1 二进制炸弹

    汇编与反汇编 汇编与反汇编的区别 phase_1 比较字符串是否相同 二进制炸弹 常见汇编指令详解 AT&T 格式...

  • IOS 逆向开发(二十一) 汇编-基础

    @[TOC](IOS 逆向开发(二十一) 汇编-基础) 1. 汇编简介 为啥要需要学习汇编? 大学都学习过汇编语言...

  • 993. 二叉树的堂兄弟节点

    2021-05-17 LeetCode每日一题 链接:https://leetcode-cn.com/proble...

  • [arm64]6、OC反编译

    1、OC汇编 1.1、分析Person类的汇编过程 person类方法分析 1.2、block反汇编

  • 汇编系列1—初始汇编

    在逆向开发中,非常重要的一个环节就是静态分析.首先我们是逆向iOS系统上面的APP.那么我们知道,一个APP安装在...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

网友评论

      本文标题:2021-05-17(汇编1)

      本文链接:https://www.haomeiwen.com/subject/nbmrvrtx.html