博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言1
阅读量:5222 次
发布时间:2019-06-14

本文共 2191 字,大约阅读时间需要 7 分钟。

 

8086CPU特性:

 

1.运算器一次最多可以处理16位数据,寄存器最大宽度为16位,寄存器和运算器之间的通路为16位

 

2.8086CPU有20位地址总线,1M寻址能力,086CPU又是16位结构,64KM寻址能力

1M寻址能力: 11111111111111111111 <==>1048575<==>1024*1023
64KM寻址能力:   1111111111111111<==>65535<==>1024*63

 

3.CPU将2个16位地址合成为一个20位物理地址,一个称为段地址,一个称为偏移地址,

偏移地址为16位,最大为FFFF,64KB

 

4.物理地址= 段地址H * 10H+偏移地址, 物理地址= 段地址 * 16+偏移地址,

本质含义:CPU访问内存是,用一个基础地址(段地址x16)和一个相对于基础地址的便宜地址相加,得出内存单元的物理地址.

 

5.4个段寄存器,CS指令段寄存器, DS数据段寄存器, SS堆栈段寄存器, ES, 任意时刻,CPU都是将CS:IP指向的内容当做指令执行。

 

6.栈 先进后出的线性表,出栈pop,SS:IP+2, 入栈push,SS:IP-2,pop,push是以2个字节为单位执行。

 

7.无论是 数据段,代码段,栈段都是一段物理内存,一段内存可以既是代码存储空间,又是数据存储空间,还可以是栈空间,也可以什么都不是。仅此而已!

 

基本概念

1个字节 == 8位 == 11111111(2进制)

255(10进制) = 11111111(2进制)==FF(16进制)==8位寄存器

65535(10进制) = 11111111 11111111(2进制)==FFFF(16进制)==16位寄存器

16位通用寄存器: AX BX CX DX, 最大能存放是数是FFFF

ah al  表示 AX的高8位  和 低八位寄存器

比如执行:mov ax f4a3H     

ax=f4a3H(62627)   

内存中 11110100   10100011

                    f4         a3
                    ah         al

bh bl,ch cl,ch cl 同理。

注: 对于cpu来说 ah ,al是独立的 没有任何进位关系,最大能存放FF

以下语句都是错误的:

mov ax al(在8位和16寄存器之间传输数据)
mov ax bl(在8位和16寄存器之间传输数据)
mov al 20000(在8位最大存放255的数据, mov al 255正确)
add al 100H(将一个高8位的数据加到8位寄存器, add al 1FH正确)

习题:

1.mov ax,62627   ax=______

2.mov ah,31H    ax=______

3.mov al,23H    ax=______

4.add ax,ax     ax=______

5.mov bx,826CH   bx=______

6.mov cx,ax     cx=______

7.mov ax,bx      ax=______

8.add ax,bx      ax=______

9.mov al,bh      ax=______

10.mov ah,bl     ax=______

11.add ah,ah     ax=______

12.add al,6      ax=______

13. add al,al    ax=______

14.mov ax,cx     ax=______

习题解析:
1.mov ax,62627   ax=f4a3H  ;<--把十进制数62627变成十六进制就是结果F4A3H

2.mov ah,31H     ax=31a3H  ;<--ah=31h,al不变,所以ax=31A3H

3.mov al,23H    ax= 3123H  ;<--al=23h,ah不变,所以ax=3123h

4.add ax,ax      ax= 6246H  ;<--ax=ax+ax=3123h+3123h=6246h,用计算器算一下结果就出来了

5.mov bx,826CH   bx=826CH   ;<--bx=826CH,ax不变

6.mov cx,ax      cx=6246H   ;<--cx=ax=6246H

7.mov ax,bx      ax=826CH   ;<--ax=bx=826CH

8.add ax,bx      ax=04d8H   ;<--ax=ax+bx=826CH+826CH=04D8H,0前面还有个1,但是ax放不下,所以丢弃,16位寄存器只能放下 FFFF

9.mov al,bh      ax=0482H   ;<--al=bh=82h,ah不变

10.mov ah,bl     ax=6C82H   ;<--ah=bl=6Ch,al不变

11.add ah,ah     ax=d882H   ;<--ah=ah+ah=6Ch+6Ch=D8h,al不变

12.add al,6      ax=d888H   ;<--al=al+6=82H+6=88h,ah不变

13. add al,al    ax= d810H  ;<--al=al+al=88h+88h=10h,ah不变,结果是110h但al的大小只有8位二进制位,能放下的最大数为FFh,所以高位丢弃,只保留低两位

14.mov ax,cx     ax=6246H    ;<--ax=cx=6246H

转载于:https://www.cnblogs.com/mayingkun/p/4206248.html

你可能感兴趣的文章
Swift - 给图片添加文字水印(图片上写文字,并可设置位置和样式)
查看>>
Android 开发中 iBeacon的使用
查看>>
hdu 1828 Picture(线段树扫描线矩形周长并)
查看>>
按钮function关闭子页面刷新父页面中部分控件数据
查看>>
产品微软K2+微软平台集成解决方案
查看>>
备份数据库CMD命令操作MSSQL2005数据库
查看>>
jUnit4初探(1)
查看>>
SAX解析xml characters方法要注意的问题
查看>>
第3章 表、栈和队列
查看>>
faceswap安装说明
查看>>
【转】OpenCV对图片中的RotatedRect进行填充
查看>>
pymysql模块
查看>>
API查询利器-Zeal
查看>>
c#运算符
查看>>
C# 之泛型详解
查看>>
leetcode -- 一个算法面试题相关的网站
查看>>
Reentrancy VS Thread safe
查看>>
多表insert操作详解
查看>>
关于Tcp的一些浅见
查看>>
三次握手四次挥手
查看>>