Python

8086汇编

2018-02-16  本文已影响357人  阿凡提说AI

编程语言的发展

编程语言的发展

屏幕快照 2018-02-16 下午6.11.49.png

汇编语言的特点

汇编语言 vs 高级语言

采用高级语言C++和汇编语言编写同一个功能
将a+b的结果赋值给c,然后在屏幕上打印c的结果


屏幕快照 2018-02-16 下午6.47.13.png

汇编语言的用途(为什么要学习汇编语言?)

汇编语言的种类

学前须知

总线

图片 2.png

数据总线

内存

内存地址空间的大小受CPU地址总线宽度的限制。8086的地址总线宽度为20,可以定位2_20个不同的内存单元(内存地址范围0x00000~0xFFFFF),所以8086的内存空间大小为1MB

0x00000~0x9FFFF:主存储器。可读可写

0xA0000~0xBFFFF:向显存中写入数据,这些数据会被显卡输出到显示器。可读可写

0xC0000~0xFFFFF:存储各种硬件\系统信息。只读


图片 1.png

CPU的典型构成

内部部件之间由总线相连


屏幕快照 2018-02-16 下午8.05.50.png

寄存器

通用寄存器

字节与字

8086的寻址

内存的分段管理

段寄存器

CS和IP

指令的执行过程

屏幕快照 2018-02-16 下午10.53.27.png

指令和数据

jmp指令

屏幕快照 2018-02-16 下午11.42.59.png
屏幕快照 2018-02-16 下午11.44.38.png

代码段

屏幕快照 2018-02-17 上午12.38.53.png

什么是Debug

屏幕快照 2018-02-17 下午12.10.19.png

打开Debug

Debug的常用功能

R命令

D命令

E指令

屏幕快照 2018-02-17 下午12.45.47.png

U命令

输入“u”、“u 段地址:偏移地址”可以将内存中的内容翻译为对应的汇编指令


图片 1.png

A命令

输入“a ”、“a 段地址:偏移地址”可以从某位置开始写入汇编指令


图片 1.png

DS和[address]

mov bs,1000H
mov ds,bx
mov al,[0]

上面3条指令的作用将10000H(1000:0)中的内存数据赋值到al寄存器中
mov al,[address]的意思将DS:address中的内存数据赋值到al寄存器中
由于al是8位寄存器,所以是将一个字节的数据赋值给al寄存器

字型数据的传递(2个字节)

屏幕快照 2018-02-17 下午1.08.06.png

大小端

屏幕快照 2018-02-17 下午1.12.31.png

mov指令

图片 1.png

add和sub指令

图片 1.png

数据段

push-pop

在8086中,push、pop操作的数据都是2个字节的


图片 1.png

栈段

第一个完整的汇编程序

汇编语言的组成

汇编语言由2类指令组成

调试可执行程序

图片 1.png

伪指令-segment、ends、end

退出程序

图片 1.png

中断

DOS系统功能调用

每个子程序都有一个功能号,所有的功能调用的格式都是一致的。调用的步骤大致如下:

loop指令

      mov cx,循环次数
标号:
      循环执行的程序段
      loop  标号

段前缀

在代码段中存放数据

计算1122h、3344h、5566h的和,结果存放在ax中


图片 1.png

在代码段中使用栈

假设代码中有数据1122h、3344h、5566h、7788h、99aah、0aabbh,利用栈将它们逆序存放


图片 1.png

包含多个段的程序

call和ret指令

上一篇下一篇

猜你喜欢

热点阅读