汇编语言程序设计-笔记-第1章-汇编语言基础知识(基本概念+数据表示形式+8086微处理器介绍)

第1章 汇编语言基础知识

(一)汇编语言设计概述

1.(机器)指令与程序
  • 指令=操作码(做什么)+操作数(针对谁操作)

  • 程序=指令序列

2.程序设计语言

(1)机器语言(二进制)

(2)汇编语言(从内存单元的地址访问)(经过寄存器、CPU)(汇编指令与机器指令一对一)

(3)高级语言(不经过寄存器、CPU)

  • 面向过程
    • 面向用计算机求解问题的过程,不依赖具体机器,如BASIC,PASCAL,C,FORTRAN,COBOL等
  • 面向对象
    • 面向求解问题本身,如C++,Smalltalk,面向对象的PASCAL等

举例

机器:01001001  00001100    00000010
汇编:ADD AX, 2             INC AX
高级:x = 4 + 2             x++
3.汇编语言的特点
  • 与处理器密切相关
  • 程序效率高
  • 比编写高级源程序烦琐
  • 比调试高级语言程序困难
4.汇编语言主要应用场合
  • 执行时间短或占用存储量少

  • 程序直接控制硬件

  • 需提高大型软件性能

  • 无合适的高级语言

5.流程图

在这里插入图片描述

举例:在BUF开始的三个内存单元中,放有无符号数X、Y、Z,将它们按递增顺序放到RES开始的三个单元中(RES代表内存单元的地址)

在这里插入图片描述

6.汇编语言程序设计基本步骤
  • 问题定义
  • 建数学模型
  • 确定解决数学模型的算法
  • 画流程图
  • 编程序
  • 上机调试
  • 试运行
7.汇编程序编程质量标准

程序的

  • 正确性

  • 完整性

  • 易读性

  • 执行时间和效率

  • 占用内存的大小

(二)数据表示方法

1.数与数制

(1)数码:数的符号,例如二进制是0、1

(2)基:数码的个数,例如二进制是2

(3)权值:每一位的值,例如二进制是 2 n ( n = 0 , 1 , 2 … … ) 2^n(n=0, 1, 2……) 2n(n=0,1,2)

(4)数制:如二进制(B)、十进制(D)、八进制(Q)、十六进制(H)

2.数制转换

(1)非十进制——>十进制

(按权展开)

  • 二进制 → \rightarrow 十进制: 101 B = 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 5 D 101B=1\times2^{2}+0\times2^{1}+1\times2^{0}=5D 101B=1×22+0×21+1×20=5D

  • 八进制 → \rightarrow 十进制: 123 Q = 1 × 8 2 + 2 × 8 1 + 3 × 8 0 = 73 D 123Q=1\times8^2+2\times8^1+3\times8^0=73D 123Q=1×82+2×81+3×80=73D

  • 十六进制 → \rightarrow 十进制: 345 H = 3 × 1 6 2 + 4 × 1 6 1 + 5 × 1 6 0 = 325 D 345H=3\times16^2+4\times16^1+5\times16^0=325D 345H=3×162+4×161+5×160=325D

(2)十进制——>非十进制

  • 整数部分

    • 一般求法

      • 连续除以基,记录每次的余数,直到商为0,最后一个余数作最高位
    • 按权展开

      • 十进制 → \rightarrow 二进制: 5 D = 4 + 1 = 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 101 B 5D=4+1=1\times2^{2}+0\times2^{1}+1\times2^{0}=101B 5D=4+1=1×22+0×21+1×20=101B
  • 小数部分

    • 一般求法

      • 连续乘以基,记录每次的整数部分,直到小数部分为0,第一个整数部分作最高位
    • 按权展开

      • 十进制 → \rightarrow 二进制: 0.525 D = 0.5 + 0.125 = 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 = 0.101 B 0.525D=0.5+0.125=1\times2^{-1}+0\times2^{-2}+1\times2^{-3}=0.101B 0.525D=0.5+0.125=1×21+0×22+1×23=0.101B

(3)二进制<——>八进制

  • 二进制 → \rightarrow 八进制

    • 从右向左,每3个一组(不足在左边补0)
  • 八进制 → \rightarrow 二进制

    • 用3位二进制数代替一个八进制数

(4)二进制<——>十六进制

  • 二进制 → \rightarrow 十六进制

    • 从右向左,每4个一组(不足在左边补0)
  • 十六进制 → \rightarrow 二进制

    • 用4位二进制数代替一个十六进制数
3.计算机中的数据表示

(1)原码、反码、补码

  • 正数

    • 原码、反码、补码相同
  • 负数

    • 反码符号位为1,其余各位对原码取反

    • 补码符号位为1,其余各位对原码取反后再对整个数加1

  • 补码产生的原因

    • 原码和反码的0有两种表示,00000000和10000000

    • 补码的0只有一种表示,00000000(100000000最高位的1溢出)

    • 以八位数为例(允许溢出) [ − 1 ] 补 = [ 256 − 1 ] 补 = [ 11111111 ] 补 [-1]_补=[256-1]_补=[11111111]_补 [1]=[2561]=[11111111],这种情况下,补码11111111对应两个数即-1和255,会产生歧义,因此八位的补码的表示范围为-128~127

(2)BCD码

  • 定义

    • 二进制编码的十进制
  • 分类

    • 压缩BCD码和非压缩BCD码

    • 例如

      • 31的压缩BCD码为:0011 0001

      • 31的非压缩BCD码为:0000 0011 0000 0001

  • BCD码的运算结果尽量用十六进制表示,原因是BCD码的运算可能会出错

(3)ASCII码

  • 编码

    • 用7位二进制数表示,第8位为0

    • 共表示128个字符

    • A:41h,a:61h,0:30H

4.基本数据类型
  • 字节
    • 8个位,高4位称高半字节,低4位称低半字节
    • 2个字节,低8位称低字节,高8位称高字节
  • 双字
    • 2个字,低16位称低字节,高16位称高字节
  • 四字
    • 4个字,低32位称低字节,高32位称高字节
  • 十字节
    • 10个字节
  • 字符串
    • 由字符构成的一个线性数组
  • 例如:063Eh(06为高字节,3E为低字节)

(三)8086微处理器

1.8086的功能结构及寄存器

在这里插入图片描述

2.8086的存储器组织

(1)数据的存储格式

在这里插入图片描述

①每个存储单元的内容为1字节,字或双字占相邻的2个或4个存储单元,存放时低字节放低地址,高字节放高地址,字或双字用低地址表示(小端方式)

②同一个地址可以看作字节单元、字单元、双字单元的地址

2号“字节”单元的内容为[0002H]=34H
2号“字”单元的内容为[0002H]=1234H
2号“双字”单元的内容为[0002H]=78351234H
  • 若X单元的内容为Y,则X单元的内容可表示为[X]=Y

  • 若X单元的内容Y也为地址,则Y单元的内容可表示为[Y]=[[X]]

③字节单元的地址可以是偶数,也可以是奇数。字单元常放在偶地址(能被2整除),双字单元常放在模4地址(能被4整除)(地址对齐)

(2)存储器的分段管理

  • 8086的存储器是16位的,可以存储 0000 H − F F F F H 0000H-FFFFH 0000HFFFFH的地址,容量为 2 16 = 64 K B 2^{16}=64KB 216=64KB

  • 8086的地址线是20位的,可以存储 00000 H − F F F F F H 00000H-FFFFFH 00000HFFFFFH的地址,容量为 2 20 = 1 M B 2^{20}=1MB 220=1MB

  • 8086CPU将1MB的存储空间分成许多逻辑段,每个段最大为64KB,于是每个存储单元可以用“段基地址:段内偏移地址”表达其准确的物理位:

    • ①段基地址(段地址)——说明逻辑段在主存中的起始位置,段地址放在模16地址,即xxx0H(段地址后4位一定为0)

    • ②段内偏移地址(偏移地址)——说明主存单元距起始位置的偏移量

  • 逻辑地址的形式为“段地址:偏移地址”,将逻辑地址中的段地址左移4位(2进制左移4位相当于16进制左移1位),加上偏移地址得到20位物理地址,同一个物理地址可以有多个逻辑地址
    在这里插入图片描述

  • 段加偏移的优点

    • ①允许程序在存储器内重定位

    • ②允许在保护模式下运行实模式下编写的地址

(3)段寄存器的作用

用途
代码段用来存放程序的指令序列。CS存段地址,IP存偏移地址,处理器用CS:IP取下一条要操作的指令
堆栈段确定堆栈所在的主存区域。SS存段地址,SP存偏移地址,处理器用SS:SP操作堆栈中的数据
数据段存放当前程序所用的数据。DS存段地址,EA存偏移地址,有效地址EA由各种主存寻址方式得到
附加段附加的数据段,也用于数据的保存。ES存段地址

(六)8086的寻址方式

1.寻址方式
  • 定义:寻找指令中操作数的方式或寻找指令转移目标地址的方式

  • 分类:数据寻址方式、程序寻址方式

  • 格式:操作码 操作数1, 操作数2 ;注释

    • 操作数2:源操作数SRC,表示参与指令操作的一个对象

    • 操作数1:目的操作数DEST,可作为指令操作的对象或存放指令操作的结果

  • 操作数的符号表示

操作数表示
R8AH/AL/BH/BL/CH/CL/DH/DL
R16AX/BX/CX/DX
REGR8或R16
SEGCS/DS/SS/ES
M8一个8位存储器操作单元
M16一个16位存储器操作单元
MEMM8或M16
I8一个8位立即数
I16一个16位立即数
IMMI8或I16
DEST目的操作数
SRC源操作数
2.数据寻址方式

MOV指令

格式:MOV DEST, SRC

功能:源操作数的内容传送到目标操作数,目标操作数中的内容不变

定义举例
立即数寻址方式操作数为立即数IMMMOV AL,05H功能:将8位立即数05H送至AL寄存器;
MOV AX, 0102H功能:将16位立即数0102H送至AX寄存器,01H存放在AH,02H存放在AL
寄存器寻址方式操作数为寄存器REG/SEGMOV BX, AX功能:将AX寄存器的内容送至BX寄存器
存储器寻址方式直接寻址方式操作数为[EA]MOV AX, [2000H]功能:将DS:[2000H](默认为DS,否则要用段超越前缀)的内容送至AX;
MOV AX, ES:[2000H]功能:将ES:[2000H]的内容送至AX;
寄存器间接寻址方式操作数为[EA],EA=BX/SI/DIMOV AX, [SI]功能:将DS:[SI](默认为DS,否则要用段超越前缀)的内容送至AX;
基址变址寻址操作数为[EA],EA=BX/BP/SI/DI+8/16位偏移量(若EA超过FFFFH,则取64K的模)MOV AX, [DI+06H]功能:将DS:[DI+06H](DI默认为DS,否则要用段超越前缀)的内容送至AX;
MOV AX, [BP+06H]功能:将SS:[BP+06H](BP默认为SS,否则要用段超越前缀)的内容送至AX;
MOV AX, [BP]功能:等同于MOV AX, [BP+0H]
寄存器相对寻址操作数为[EA],EA=BX/BP+SI/DI(若EA超过FFFFH,则取64K的模)MOV AX, [BX+SI]功能:将DS:[BX+SI](BX默认为DS,否则要用段超越前缀)的内容送至AX;
MOV AX, [BP+DI]功能:将SS:[BP+DI](BP默认为SS,否则要用段超越前缀)的内容送至AX;
相对基址变址寻址操作数为[EA],EA=BX/BP+SI/DI+8/16位偏移量(若EA超过FFFFH,则取64K的模)MOV AX, [BX+SI+06H]功能:将DS:[BX+SI+06H](BX默认为DS,否则要用段超越前缀)的内容送至AX;
MOV AX, [BP+DI+06H]功能:将SS:[BP+DI+06H](BP默认为SS,否则要用段超越前缀)的内容送至AX;

注意

①偏移量可以用符号表示,该符号为事先定义好的变量或常量,作为偏移量的时候就是一个数值

②同一个寻址方式可以有不同的形式

MOV AX, [BX][SI]等价于MOV AX, [BX+SI]
MOV AX, count[SI]等价于MOV AX, [SI+count]
MOV AX, wnum[BX][SI]等价于MOV AX, wnum[BX+SI]或MOV AX, [BX+SI+wnum]
3.程序寻址方式
  • 用途:确定转移指令和子程序调用指令的转向地址
  • 分类:直接、相对、间接

(BP默认为SS,否则要用段超越前缀)的内容送至AX; |

注意

①偏移量可以用符号表示,该符号为事先定义好的变量或常量,作为偏移量的时候就是一个数值

②同一个寻址方式可以有不同的形式

MOV AX, [BX][SI]等价于MOV AX, [BX+SI]
MOV AX, count[SI]等价于MOV AX, [SI+count]
MOV AX, wnum[BX][SI]等价于MOV AX, wnum[BX+SI]或MOV AX, [BX+SI+wnum]
3.程序寻址方式
  • 用途:确定转移指令和子程序调用指令的转向地址
  • 分类:直接、相对、间接
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言实战笔记第九介绍了方差分析的内容。方差分析是一种用于比较两个或多个组之间差异的统计方法。在R语言中,可以使用lm函数进行方差分析的回归拟合。lm函数的基本用法是: myfit <- lm(I(Y^(a))~x I(x^2) I(log(x)) var ... [-1],data=dataframe 其中,Y代表因变量,x代表自变量,a代表指数,var代表其他可能对模型有影响的变量。lm函数可以拟合回归模型并提供相关分析结果。 在方差分析中,还需要进行数据诊断,以确保模型的可靠性。其中几个重要的诊断包括异常观测值、离群点和高杠杆值点。异常观测值对于回归分析来说非常重要,可以通过Q-Q图和outlierTest函数来检测。离群点在Q-Q图中表示落在置信区间之外的点,需要删除后重新拟合并再次进行显著性检验。高杠杆值点是指在自变量因子空间中的离群点,可以通过帽子统计量来识别。一般来说,帽子统计量高于均值的2到3倍即可标记为高杠杆值点。 此外,方差分析还需要关注正态性。可以使用car包的qqplot函数绘制Q-Q图,并通过线的位置来判断数据是否服从正态分布。落在置信区间内为优,落在置信区间之外为异常点,需要进行处理。还可以通过绘制学生化残差的直方图和密度图来评估正态性。 综上所述,R语言实战第九介绍了方差分析及其相关的数据诊断方法,包括异常观测值、离群点、高杠杆值点和正态性检验。这些方法可以用于分析数据的可靠性和模型的适应性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言实战笔记--第八 OLS回归分析](https://blog.csdn.net/gdyflxw/article/details/53870535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值