功能双字节二进制有符号数除法(补码)(精)

合集下载

汇编语言指令大全-(1)

汇编语言指令大全-(1)
则(AL)<--(AL)-6,(AH)<--(AH)-1,CF<--AF,(AL)<--(AL) and 0FH,
否则(AL)<--(AL) and 0FH
ADC
带进位加法指令 ADC(Addition Carry)
格式: ADC OPRD1,OPRD2
功能: OPRD1<--OPRD1 + OPRD2 + CF
说明:
1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.
2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
CMPSW
字符串比较指令
格式: CMPS OPRD1,OPRD2
CMPSB
CMPSW
功能: 由SI寻址的源串中数据与由DI寻址的目的串中数据进行比较,比较结果送标志位,而不改变操作数本身.
同时SI,DI将自动调整.
说明:
1. 其中OPRD2为源串符号地址,OPRD1为目的串符号地址.
2. 本指令影响标志位AF、CF、OF、SF、PF、ZF.本指令可用来检查二个字符串是否相同,可以使用循环控制方法对整串进行比较.
3. 与MOVS相似,CMPS指令也可以不使用操作数,此时可用指令CMPSB或CMPSW分别表示字节串比较或字串比较.
DEC ALFA[DI+BX]
DIV

3、带符号的二进制数(原码、反码、补码)

3、带符号的二进制数(原码、反码、补码)

3、带符号的⼆进制数(原码、反码、补码)1、数值的符号之前所提到的⼆进制数,没有考虑到符号问题,所指的都是⽆符号数。

但实际上数字是有正、负符号的。

以数字6为例,按照习惯的数学表⽰⽅法,正数6⽤+6表⽰,⼆进制为+110;负数6⽤-6表⽰,⼆进制数为-110.但在数字系统中,符号“+”、“-”也要数字化,⼀般将所对应的⼆进制数最⾼位增加多⼀位⽤来设为符号位,⽤“0”表⽰“+”、⽤“1”表⽰“-”。

为了区分⼀个符号数的“+”、“-”符号数字化前后的两种表⽰⽅法,引⼊真值和机器数两个术语。

真值:在⼀个⼆进制数前⾯⽤“+”、“-”表⽰正、负数的这种⼆进制数叫做真值。

机器数:将“+”、“-”符号⽤⼆进制码“0”、“1”表⽰的⼆进制数叫做机器数。

数据最后存到计算机中就是⽤机器数来表⽰的如下:+6 -> +110 -> 0110-6 -> -110 -> 1110(⼗进制数) (真值)(机器数)在计算机中最⼩基本的计算单位是字节,1字节=8位⼆进制数,由此可见最后存放到计算机中的机器数是8位⼆进制数,不够补0,符号位占据了1⼀个位置,所以到了最后只有7位数可以使⽤。

在c语⾔中使⽤ unsigned 关键字可以定义⼀个⽆符号的变量,可将变量的存储范围变⼤。

机器数是由符号位+⼆进制数组成的,机器数实际上是个⼤概念,意指这种类型的数据能存进去计算机,机器数在计算机中⼜有三种不同的表⽰⽅法,分别是:原码、补码、反码。

下⾯逐个列举2、原码将⼆进制数的真值中的正符号⽤0表⽰,负数符号⽤1表⽰,叫做数原码形式,简称原码。

例如:⼗进制为9的数,它的真值形式和原码形式如下所⽰:+9 -> +0001001 -> 0 0001001-9 -> - 0001001 -> 1 0001001(⼗进制数) (真值)(原码)原码⽤8位数码表⽰,最⾼位为符号位。

原码的优点是易于辨认,因为它的数值部分就是该数的绝对值,⽽且与真值和⼗进制数的转换⼗分⽅便。

【推荐】C语言中有符号数与无符号数解析

【推荐】C语言中有符号数与无符号数解析

C语言中有符号数,与无符号数的辨析关于有符号数,无符号数,你可能听过两种不同的回答。

一种是教科书,它会告诉你:计算机用“补码”表示负数。

可是有关“补码”的概念一说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。

再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。

却并没有告诉你为什么用这个公式就可以和答案?另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数。

这种说法本身没错,可是如果没有下文,那么它就是错的。

至少它不能解释,为什么字符类型的-1用二进制表示是“1111 1111”(16进制为FF);而不是我们更能理解的“10000001”。

(为什么说后者更好理解呢?因为既然说最高位是1时表示负数,那10000001不是正好是-1吗?)。

让我们从头说起。

1、你自已决定是否需要有正负。

就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负。

在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型。

数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有有符类型。

字符类型也分为有符和无符类型。

2、使用二制数中的最高位表示正负。

首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。

不同长度的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。

字符类型固定是1个字节,所以最高位总是第7位。

(红色为最高位)单字节数:11111111双字节数:1111111111111111四字节数:11111111111111111111111111111111当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,用来表示该数的大小。

当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。

补码运算加减乘除原理

补码运算加减乘除原理

首先我们来看为什么要使用补码运算法:因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.于是人们开始探索将符号位参与运算, 并且只保留加法的方法. 首先来看原码:计算十进制的表达式: 1-1=01 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.为了解决原码做减法的问题, 出现了反码:计算十进制的表达式: 1-1=01 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反= [1111 1111]反 = [1000 0000]原 = -0发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上.虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0.于是补码的出现, 解决了0的符号以及两个编码的问题:1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补= [0000 0000]补=[0000 0000]原这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:接下来我们来看补码运算原理:在计算机里,如果我们要计算5-3的值,我们既可以用5减去3,也可以用5加上13。

二进制的显示方式(C语言设计报告)

二进制的显示方式(C语言设计报告)

本科学生课程设计(论文)题目 : 数据在内存中的存放形式目录第一章前言 (2)第二章系统功能分析: (2)重点 (2)数据的基本类型图 (2)1,无符号短整型 (3)2,有符号短整型 (3)3,有符号基本整形 (3)4. 无符号基本整形 (5)5. 单精度 (5)6. 双精度 (6)7. 长双精度型 (6)第三章总体设计 (6)第四章详细设计 (7)第五章系统实现 (17)第六章结束语 (21)前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。

其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。

C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。

然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。

1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。

C语言的优点很多,主要的有如下四点:1.兼备高级语言与低级语言的优点,属于一种中间语言。

2.它是一种结构化程序设计语言,非常适合结构化程序设计。

3.有较丰富的数据类型、运算符以及函数供以选用。

4.直接与内存打交道,使修改、编辑其他程序与文档变得轻松,简单。

计算机内部的数据存储都是以二进制形式存放的,为了大家进一步了解计算机编程特此对数据在内存中的存放形式进行以下研究。

第二章 系统功能分析数据中的存放形式包括基本类型、构造类型、指针类型、空类型,我们暂且只对其中的基本类型中的整型、字符型、浮点型进行探讨…………………………….*重点计算机内无论整数还是浮点数都是以二进制存储的浮点数由三部分组成:符号位s ,阶码e ,尾数m 。

1,有符号和无符号的区别是一个有符号位,另一个没有符号整型(int)字符型(char) 浮点型 短整型长整形长双精度型单精度双精度型基本整形有符号短整型 无符号短整型有符号长整形 无符号长整形单精度有符号单精度长双精度型有符号长双精度型位.。

二进制数的逻辑运算(绝密)

二进制数的逻辑运算(绝密)

二进制数的逻辑运算在计算机中,除了能表示正负、大小的“数量数”以及相应的加、减、乘、除等基本算术运算外,还能表示事物逻辑判断,即“真”、“假”、“是”、“非”等“逻辑数”的运算。

能表示这种数的变量称为逻辑变量。

在逻辑运算中,都是用“1”或“0”来表示“真”或“假”,由此可见,逻辑运算是以二进制数为基础的。

计算机的逻辑运算区别于算术运算的主要特点是:逻辑运算是按位进行的,位与位之间不像加减运算那么有进位或借位的关系。

逻辑运算主要包括的运算有:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和逻辑“非”运算。

此外,还有“异或”运算。

(1)逻辑与运算(乘法运算)逻辑与运算常用符号“×”、“∧”或“&”来表示。

如果A、B、C为逻辑变量,则A和B的逻辑与可表示成A×B=C、A∧B=C或A&B=C,读作“A与B等于C”。

一位二进制数的逻辑与运算规则如表1-2所示。

表1-2 与运算规则[table=548][tr][td=1,1,187]A[/td][td=1,1,177]B[/td][td=1,1,184]A∧B(C)[/td][/tr][tr][td=1,1,187]0[/td][td=1,1,177]0[/td][td=1,1,184]0[/td][/tr][tr][td=1,1,187]0[/td][td=1,1,177]1[/td][td=1,1,184]0[/td][/tr][tr][td=1,1,187]1[/td][td=1,1,177]0[/td][td=1,1,184]0[/td][/tr][tr][td=1,1,187]1[/td][td=1,1,177]1[/td][td=1,1,184]1[/td][/tr][/table]由表1-2可知,逻辑与运算表示只有当参与运算的逻辑变量都取值为1时,其逻辑乘积才等于1,即一假必假,两真才真。

这种逻辑与运算在实际生活中有许多应用,例如,计算机的电源要想接通,必须把实验室的电源总闸、USP 电源开关以及计算机机箱的电源开关都接通才行。

运算机二进制八进制十六进制及反码原码补码逻辑运算

运算机二进制八进制十六进制及反码原码补码逻辑运算

二进制数据的表示法二进制数据也是采纳位置,其是以2为底的。

例如二进制数据110.11,逢2进1,其权的大小顺序为22、21、20、2-1、2-2。

关于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为:(a(n-1)a(n-2)...a0...a(-m))2=a(n-1) * 2 (n-1)+ a(n-2) *2(n-2) + ...a * 2(0)...+a(-m)* 2(-m)二进制数据一样可写为:(a(n-1)a(n-2)…a(1)a(0).a(-1)a(-2)…a(-m))2。

注意:1.式中aj表示第j位的系数,它为0和1中的某一个数。

2.a(n-1)中的(n-1)为,输入法无法打出因此用括号括住,幸免混淆。

3.2^2表示2的平方,以此类推。

【例1102】将二进制数据111.01写成加权系数的形式。

解:(111.01)2=(1×2^2)+(1×2^1)+(1×2^0)+(0×2^-1)+(1×2^-2)二进制和,八进制一样,都以二的幂来进位的。

二进制运算二进制数据的的大体规律和数的运算十分相似。

最经常使用的是加法运算和运算。

1.二进制加法运算有四种情形: 0+0=0 0+1=1 1+0=1 1+1=10 ps:0 进位为1【例1103】求 (1101)2+(1011)2 的和解: 1 1 0 1+1 0 1 1-------------------1 1 0 0 02.二进制乘法运算有四种情形:0×0=0 1×0=0 0×1=0 1×1=1【例1104】求 (1110)2 乘(101)2 之积解: 1 1 1 0× 1 0 1-----------------------1 1 1 00 0 0 01 1 1 0-------------------------1 0 0 0 1 1 0(这些计算就跟十进制的加或乘法相同,只是进位的数不一样罢了,十进制的是到十才进位那个地址是到2就进了)3. 二进制减法0-0=0,1-0=1,1-1=0,10-1=1。

程序集说明书

程序集说明书
P813.ASM 自变量为单字节规则量(函数值为多字节)
P821.ASM 自变量为双字节规则量(函数值为单字节)
P822.ASM 自变量为双字节规则量(函数值为双字节)
P823.ASM 自变量为双字规则量(函数值为多字节)
P831.ASM 函数值为单字节规则量(自变量为单字节)
P623.ASM 模-数转换(单路12位A/D芯片AD574)
P624.ASM 模-数转换(单路3 1/2位A/D芯片5G14433)
P625.ASM 模-数转换(单路4 1/2位A/D芯片5G7135)
P631.ASM 数-模转换(单路8位D/A芯片AD1408)
P632.ASM 数-模转换(单路8路D/A芯片DAC0832)
P242.ASM BCD码求补(双字节)
P243.ASM BCD码求补(多字节)
P251.ASM 二进制浮点数左规(双字节无符号数)
P252.ASM 二进制浮点数左规(多字节无符号数)
P253.ASM 二进制浮点数左规(双字节有符号数)
P254.ASM 二进制浮点数左规(多字节有符号数)
P261.ASM 二进制浮点数对阶(多字节无符号数)
P262.ASM 二进制浮点数对阶(多字节无符号数)
P263.ASM 二进制浮点数对阶(多字节有符号数)
P264.ASM 二进制浮点数对阶(多字节有符号数)
第三部分:二进制定点数运算
P311.ASM 加法(多字节无符号数)
P223.ASM BCD码移位(多字节循环左移一位)
P224.ASM BCD码移位(多字节循环右移一位)
P231.ASM 二进制定点数求补(单字节)

字节、字、双字,整数,双整数和浮点数详解

字节、字、双字,整数,双整数和浮点数详解

字节、字、双字,整数,双整数和浮点数详解1.引言1.1 概述在计算机科学和编程领域,字节、字、双字、整数、双整数和浮点数是非常重要的概念和数据类型。

它们在存储和处理数据时起着关键作用。

本文将对这些概念和数据类型进行详细解释和讨论。

首先,字节是计算机存储和处理数据的基本单位之一。

一个字节由8位二进制数字组成,可以表示256种不同的值。

字节一般用于存储和表示字符,例如ASCII码中的每个字符都用一个字节表示。

接下来,字是字节的扩展,通常由两个字节组成。

字是更大的数据单元,可以表示更多的不同值。

字通常用于存储和表示较大的字符集,如Unicode编码中的字符。

双字是对字的一种拓展,由四个字节组成。

双字可以表示更大范围的数据,通常用于存储和处理较大的整数和浮点数。

然后,整数是一种完整的数值数据类型,用于表示不带小数部分的数值。

整数可以是负数、零或正数,其取值范围取决于所使用的字节数。

整数常用于计算、逻辑运算和数据存储。

双整数是对整数的一种拓展,由两个整数组成。

双整数可以表示更大范围的整数值,通常用于需要更精确的计算和表示的情况。

最后,浮点数是一种带有小数部分的数值数据类型。

浮点数通常由双字表示,其中一部分用于存储小数部分,另一部分用于存储指数部分。

浮点数常用于科学计算、图形处理和物理模拟等领域。

本文将详细探讨字节、字、双字、整数、双整数和浮点数的定义、特点、应用、表示方式、运算规则和数据范围等方面内容。

通过深入理解这些概念和数据类型,我们可以更好地理解计算机的内部处理和存储方式,并在编程中更加灵活和高效地处理数据。

1.2文章结构文章结构部分的内容可以写成以下方式:1.2 文章结构本文将详细介绍字节、字、双字、整数、双整数和浮点数的概念以及其应用。

文章结构如下:2.正文2.1 字节2.1.1 定义本节将介绍字节的定义,以及字节在计算机中的作用和意义。

2.1.2 应用本节将探讨字节在不同应用场景下的具体应用,例如在存储和传输数据中的作用。

计算机基础二进制十进制

计算机基础二进制十进制
1.4
1.4.1 1.4.2 二进制 进位制
数字与编码
1.4.3
1.4.4
十进制与二、八、十六进制的转换
二进制与其他进制的转换
1.4.5
二、八、十六进制数字对照表
1.4.1
二进制
电子计算机中,数的表示采用二进制。二进制 有两个数字,即0和1,它们用具有两种稳定状 态的电气元件很容易实现,如电压的高低,二 极管的导通和截止等。
十进制数据转换成二进制采用的是:整数部分按 “倒序除2取余法”的原则进行转换;小数部分按 “顺序乘2取整法”的原则进行转换。
【例2】将(236)D转换成二进制。 转换过程如图1-1所示。
2 2 2 3 6 1 1 8 2 2 2 5 9 2 9 1 4 2 2 2 7 3 1 0 „„„„„ „„„„„ „„„„„ „„„„„ „„„„„ „„„„„ „„„„„ „„„„„ 0 0 1 1 0 1 1 1 二进制数的高位 二进制数的低位
常用信息编码
1.BCD码
2.ASCII码
表2-4 十进制数和BCD码对照表
十进制 BCD码 十进制 BCD码
0
1 2 3
0000
0001 0010 0011
5
6 7 8
0101
0110 0111 1000
4
0100
9
1001
表2-5 7位ASCII码表
765 4321 0000 0001 000 NUL SOH 001 DLE DC1 010 SP ! 011 0 1 100 @ A 101 P Q 110 ′ a 111 p q
机器运算
10111001 +) 00101011 11100100
表示符号数

二进制补码运算规则

二进制补码运算规则

二进制补码运算规则在计算机科学中,二进制补码运算规则是一种用于表示和处理有符号整数的方法。

它是计算机中最常用的表示有符号整数的方式之一,具有很多优点,比如可以方便地进行加法和减法运算,并且可以很容易地进行溢出判断。

二进制补码的表示方法是通过对正整数取反加一来得到负整数的表示。

具体来说,对于一个n位的二进制数,如果最高位是0,则表示一个正整数,数值的计算方式与普通的二进制数相同;如果最高位是1,则表示一个负整数,数值的计算方式为对剩余的n-1位取反加一。

以8位二进制数为例,来看一下二进制补码的运算规则:1. 加法运算:将两个二进制补码相加,如果结果溢出了8位,则溢出位被舍弃。

如果最高位是1,则表示一个负数,如果最高位是0,则表示一个正数。

在进行加法运算时,要注意如果两个数的符号位不同,则执行减法运算。

2. 减法运算:将减数取反得到其补码,然后将被减数与减数的补码相加。

同样,如果结果溢出了8位,则溢出位被舍弃。

如果最高位是1,则表示一个负数,如果最高位是0,则表示一个正数。

3. 取反运算:将一个二进制补码的每一位取反得到其补码的反码。

4. 加一运算:将一个二进制补码加一得到其补码的补码。

通过上述运算规则,我们可以方便地进行二进制补码的运算。

这种表示方法的一个重要优点是可以很容易地进行溢出判断。

在进行加法或减法运算时,如果最高位丢失了,那么就表示发生了溢出。

二进制补码还可以方便地进行乘法和除法运算。

乘法运算可以通过将两个数的补码相乘,再将结果的低位舍弃,得到正确的结果。

除法运算可以通过将两个数的补码相除,再将结果的商和余数进行处理,得到正确的结果。

二进制补码的运算规则在计算机硬件中得到了广泛应用。

计算机中的运算单元和控制单元都会使用二进制补码进行运算。

它不仅可以方便地进行加法和减法运算,还可以很容易地进行乘法和除法运算,从而实现了计算机中的各种运算操作。

总结一下,二进制补码运算规则是一种用于表示和处理有符号整数的方法。

MCS-51浮点运算子程序库及其使用说明

MCS-51浮点运算子程序库及其使用说明
MOV C,ACC.6 ;将阶码扩充为8bit补码
MOV ACC.7,C
MOV R5,A ;存放在R5中
INC R1
MOV A,@R1 ;将尾数高字节存放在R6中
MOV R6,A
INC R1
MOV A,@R1 ;将尾数低字节存放在R7中
MOV R7,A
DEC R1 ;恢复数据指针
MOV R3,A
INC R0
MOV A,@R0 ;将尾数低字节存放在R4中
MOV R4,A
DEC R0 ;恢复数据指针
DEC R0
RET
MVR1: MOV A,@R1 ;将[R1]传送到第二工作区中的子程序
MOV C,ACC.7 ;将数符保存在位1EH中
MOV 1EH,C
MOV R0,#36H ;指向BCD码浮点操作数c
LCALL BTOF ;将其转换成二进制浮点操作数
MOV R0,#33H ;指向BCD码浮点操作数b
LCALL BTOF ;将其转换成二进制浮点操作数
MOV R0,#30H ;指向BCD码浮点操作数a
5.工作区:数据工作区固定在A、B、R2~R7,数符或标志工作区固定在PSW和23H单
元(位1CH~1FH)。在浮点系统中,R2、R3、R4和位1FH为第一工作区,R5、R6、R7和位1EH
为第二工作区。用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的
透明性。
6.子程序调用范例:由于本程序库特别注意了各子程序接口的相容性,很容易采用
MCS-51浮点运算子程序库及其使用说明.txt爱情是艺术,结婚是技术,离婚是算术。这年头女孩们都在争做小“腰”精,谁还稀罕小“腹”婆呀?高职不如高薪,高薪不如高寿,高寿不如高兴。MCS-51浮点运算子程序库及其使用说明

单片机 第四章 80C51单片机汇编语言程序设计

单片机 第四章 80C51单片机汇编语言程序设计

(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16
(后续)
4.2.4 子程序设计
3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序
(接上)
6.在子程序调用时,还要注意参数传递的问题
子程序的基本结构
MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序 ┇ SUB:PUSH PSW PUSH ACC ;现场保护 ;
过程B
是 出口 (c) 循环结构
出口 (b) 分支结构
4.2.1
顺序程序结构
是汇编语言程序的最简单也是最基本的程序结 构。程序执行时一条接一条地按顺序执行指令, 无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A , #30H ADD A , #58H MOV 30H , A SJMP $
二、定时程序 (2)多重循环定时程序(单片机频率为6MHz) 例 MOV R5,#TIME1 LOOP2: MOV R4,#TIME2 ;单周期指令 LOOP1: NOP ;单周期指令 NOP DJNZ R4,LOOP1 ;双周期指令 DJNZ R5,LOOP2 ;双周期指令 RET 公式: 循环体时间=(TIME2*4+2+1)*TIME1*2µs 总时间=循环体时间+4µs
机器编辑->交叉汇编->串行传送
(过程图见教材92页)
单片机的开发过程
设计硬件 软件编程 软件仿真调试 源代码烧入单片机 插入单片机脱机工作 模数电路/单片机硬件 MCS51汇编语言/C
计算机/MEDWIN环境

C51--子程序大全

C51--子程序大全

(一)MCS-51定点运算子程序库及其使用说明定点运算子程序库文件名为DQ51.ASM,为便于使用,先将有关约定说明如下:1.多字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据。

地址小的单元存放数据的高字节。

例如:[R0]=123456H,若(R0)=30H,则(30H)=12H,(31H)=34H,(32H)=56H。

2.运算精度:单次定点运算精度为结果最低位的当量值。

3.工作区:数据工作区固定在PSW、A、B、R2~R7,用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性。

(1)标号:BCDA功能:多字节BCD码加法入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。

出口信息:和在[R0]中,最高位进位在CY中。

影响资源:PSW、A、R2 堆栈需求:2字节BCDA: MOV A,R7 ;取字节数至R2中MOV R2,AADD A,R0 ;初始化数据指针MOV R0,AMOV A,R2ADD A,R1MOV R1,ACLR CBCD1: DEC R0 ;调整数据指针DEC R1MOV A,@R0ADDC A,@R1 ;按字节相加DA A ;十进制调整MOV @R0,A ;和存回[R0]中DJNZ R2,BCD1 ;处理完所有字节RET(2)标号:BCDB功能:多字节BCD码减法入口条件:字节数在R7中,被减数在[R0]中,减数在[R1]中。

出口信息:差在[R0]中,最高位借位在CY中。

影响资源:PSW、A、R2、R3 堆栈需求:6字节BCDB: LCALL NEG1 ;减数[R1]十进制取补LCALL BCDA ;按多字节BCD码加法处理CPL C ;将补码加法的进位标志转换成借位标志MOV F0,C ;保护借位标志LCALL NEG1 ;恢复减数[R1]的原始值MOV C,F0 ;恢复借位标志RETNEG1: MOV A,R0 ;[R1]十进制取补子程序入口XCH A,R1 ;交换指针XCH A,R0LCALL NEG ;通过[R0]实现[R1]取补MOV A,R0XCH A,R1 ;换回指针XCH A,R0RET(3)标号:NEG功能:多字节BCD码取补入口条件:字节数在R7中,操作数在[R0]中。

计算机二进制中的原码,反码,补码

计算机二进制中的原码,反码,补码

计算机⼆进制中的原码,反码,补码计算机最基本的⼯作是处理数据,⽽数据的最底层表现形式是⼆进制,并⾮是我们⼈类熟悉的⼗进制。

可以这么认为,计算机其实是很“笨的”,它只理解⼆进制数据。

今天,主要介绍计算机是怎样做加减运算的。

你可能会想,加减运算?这么简单的事情,还⽤介绍?也许还真不是你想的那样。

计算机的运算是由CPU 完成的,⽽CPU 只会做加法运算,不会做减法运算,那计算机怎样完成减法⼯作呢?1,⼆进制数我们先来看看⼆进制数。

⼆进制数是由0,1 组成的,⽐如:⼗进制的5,⽤⼆进制表⽰是 101。

⼗进制的7,⽤⼆进制表⽰是 111。

数字由正数和负数组成。

为了表⽰正负数,计算机中就有了有符号数和⽆符号数之分:⽆符号数:英⽂为unsigned,只能表⽰正数。

有符号数:英⽂为signed,即能表⽰正数,⼜能表⽰负数。

C/C++ 语⾔中的数字有有符号数和⽆符号数之分。

Java 语⾔所有的数字都是有符号数。

假如,我们⽤ 4 位⼆进制,来表⽰⽆符号数,也就是只表⽰正数,能表⽰的范围是0 到 15,转换关系如下表:⼗进制数⼆进制数⼗进制数⼆进制数00000810001000191001200101010103001111101140100121100501011311016011014111070111151111有符号数,即要表⽰正数,也要表⽰负数。

要⽤⼆进制表⽰有符号数,需要⽤⼆进制的最⾼位来表⽰符号,0表⽰正,1表⽰负。

所谓的最⾼位,也就是最左边那⼀位。

⽤ 4 位⼆进制,来表⽰有符号数,能表⽰的范围是-8 到 7,转换关系如下表:⼗进制数⼆进制数⼗进制数⼆进制数00000-8100010001-1100120010-2101030011-3101140100-4110050101-5110160110-6111070111-71111上表中的最⾼位的符号位,已标红。

要注意,对于有符号的4 位⼆进制 ----1000不是-0,⽽是-8。

计算机硬件3运算算术指令

计算机硬件3运算算术指令
ADC dest,src ;加法:dest←dest+src+CF
;ADC指令除完成ADD加法运算外,还要加上进位 CF,结果送到目的操作数
SBB dest,src
;减法:dest←dest-src-CF
;SBB指令除完成SUB减法运算外,还要减去借位 CF,结果送到目的操作数
2020/6/20
14
4
类别
指令格式
状态标志位 OF SF ZF AF PF CF
ADD DST,SRC 加法 ADC DST,SRC
INC DST
SUB DST,SRC SBB DST,SRC 减法 DEC DST
NEG DST CMP DST,SRC
1
注:
:运算结果影响标志位;
*:标志位为任意值;
:运算结果不影响标志位;
29
(1) 无符号数的乘法指令MUL
MUL BL
;(AX) ←(AL) ×(BL)
2020/6/20
25
例题3.10
多字节加法,无符号数1765H+EEFEH=?
保存和与CF,设BX=2000H。
② 单字节加:
MOV AL, [BX]
ADD AX, [BX+2] 低字节
MOV [BX+4], AL
INC BX
MOV AL, [BX]
ADC AL, [BX+2] 高字节
MOV [BX+4], AL
2020/6/20
2
3.3.2 算术运算类指令
8086/8088的算术运算指令可以处理四种类型 的数:
1. 无符号的二进制数——8位,16位 2. 带符号的二进制数——8位,16位 3. 无符号的压缩十进制(BCD码)数——只有+/4. 无符号的非压缩十进制(BCD码)数

《汇编语言程序设计》期末复习题及答案

《汇编语言程序设计》期末复习题及答案

汇编语言程序设计》期末复习题及答案一、选择( 30 题)1.下列是 8 位带符号二进制数的补码,其中最大的是( B )。

B、000000012.在一段汇编语言程序中多次调用另一段程序,用宏指令比用子程序实现( C )C、占内存空间大,但速度快3.数据定义为:EE DB 3 , 4CC DW 3456H , 6789H执行指令“ MOV CX WORD PTR EE+1'后,(CX = ( B )B、5604H4.有如下指令序列:MOV AL, 95HMOV CL, 2SAR AL , CL上述指令序列执行后,AL的内容是(D )D、0E5H5. 设A=186io, B=273s, C=0B^,把这三个数看成无符号数,则它们之间的关系是(D )D、 A<B=C6. 用一条指令实现寄存器 BX和SI的内容相加,并将结果送入AX中,这条指令是(D )D、LEA AX, [BX][SI]7 .要从端口 1234H中读入8位数据,其指令应是( C )C、MOV DX, 1234HIN AL , DX&循环控制指令 LOOPNZ/LOOPNE续执行循环的条件是(B )B、CX^ 0 且 ZF=09. 8088/8086 存储器分段,每个段不超过( D )D、64K 个字节10.表示过程定义结束的伪指令是( A )A、ENDP11 .用来存放下一条将要执行的指令代码段地址的段寄存器是( D )D 、CS12 .假定(SS) =1000H, (SP) =0100H, (AX)=5609H,执行指令 PUSH AX 后,存放数据56H 的物理地址是( D )D、100FFH13.执行“ SUB AX, [BP][DI] ”指令,取源操作数时,使用的物理地址表达式是( A )A、16*SS+BP+DI14 .设AX中有一带符号数 8520H,执行“ SAR AX, 1”指令后,AX中的值是(C )C、0C290H15 .设(BX =1234H,( DS =2000H, ( 21234H) =5678H,则指令“ LEA SI,[BX] ” 执行后的结果是:( B )B、SI=1234H16 .测试BL中的数是否为负数,若为负数则转移至AA1处,横线处的指令应为( A )A 、 JNE17 .设 DF=Q (SI) =20H, (CX) =10,执行“ REP LODSW 指令后,SI 中的内容是(C )C 、 34H18.在程序执行过程中, IP 寄存器中始终保存的是( B )B 、下一条指令的首地址19 .设SP初值为2000H,执行指令“ POP AX'后,SP的值是(A )A、2002H20 .若 AX=3500H CX=56B8H 当 AND AX CX指令执行后, AX= ( A )A、1400H21 .汇编源程序时,出现语法错误的语句是( A )A、MOV DS, 1200H22 •将数据1234H存放在存储单元中的伪指令是( C )C 、 DATA1 DB 34H, 12H23 .下面指令执行后,可能改变AL寄存器内容的指令是( D )D 、AND AL, BLB、寄存器间接寻址25 •用户为了解决自己的问题,用汇编语言所编写的程序,称为( B )B、汇编语言程序26 .用DOS功能调用时,子功能调用的编号应放在( C )C、AH27 .提供串指令中目的操作数地址的是( C )C、ES: [DI]28 .在寄存器间接寻址方式下,能够提供有效地址的寄存器有( B )B、BX BP, SI , DI29 .已知某操作数的物理地址是2117AH则它的段地址和偏移地址可能是( A )A、2025 : 0F2A30 .中断向量表中的每个中断向量所占内存空间为:(B )B、4个字节、填空(30题)1.在用直接寻址方式寻址操作数时,系统对段地址的默认值在段寄存器DS中。

微机原理基本概念复习

微机原理基本概念复习

1、字节,字概念,1字节=8位,2、字长概念:传微处理器一次送二进制数据的位数(总线宽度)。

3、地址空间概念:16根地址线—64K,20根地址线—1M空间4、进制间的转换:将十进制数25.5转换为二级制数5、数值数据的表示:有符号数:补码,n位补码的范围无符号数:FFFFH=655356、BCD码:789的压缩BCD码789H7、ASCII码:789的ASC码373839H8、求补运算概念9、8086CPU从功能上来说分成两大部分:总线接口单元BIU(Bus Interface Unit)和执行单元EU(ExecutionUnit)总线接口部件由下列4部分组成:①4个段地址寄存器(CS、DS、ES、SS)②16位的指令指针寄存器IP(Instruction Pointer) ③20位的地址加法器10辑段概念——8086 CPU 的内部结构是16位的,即所有的寄存器都是16位的,而外部寻址空间为1M,需要20位地址线。

为了能寻址1M空间。

8086把1M字节空间划分成若干个逻辑段。

11 逻辑地址概念——2000H:5F62H,则其对应的物理地址:25F62H12堆栈指针:SP与段寄存器SS一起确定在堆栈操作时,堆栈在内存中的位置。

SS和SP的初始值决定了堆栈区的大小13 状态标志的意义:即SF、ZF、PF、CF、AF和OF14 8086引脚:MN/MX、AD15 ~ AD0地址/数据分时复用引脚NMI(Non-Maskable Interrupt)不可屏蔽中断请求,输入、上升沿有效、INTR(Interrupt Request)可屏蔽中断请求,输入、高电平有效,有效时,表示请求设备向CPU申请可屏蔽中断,该中断请求是否响应受控于IF(中断允许标志)、可以被屏蔽掉INTA——RESET(复位)复位请求,输入、高电平有效,复位后CS=FFFFH、IP=0000H,所以自启动程序入口在物理地址FFFF0HINTA(Interrupt Acknowledge)可屏蔽中断响应,输出、低电平有效,有效时,表示来自INTR引脚的中断请求已被CPU响应,CPU进入中断响应周期。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(二)(11)标号:DIVS功能:双字节二进制有符号数除法(补码)入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。

出口信息:OV=0时商在R2、R3中,OV=1时溢出。

影响资源:PSW、A、B、R1~R7 堆栈需求:5字节DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值PUSH PSW ;保存结果的符号LCALL DIVD ;计算两个绝对值的商JNB OV,DVS1 ;溢出否?POP ACC ;溢出,放去结果的符号,保留溢出标志RETDVS1: POP PSW ;未溢出,取出结果的符号MOV R4,#0MOV R5,#0MDSE: JB F0,MDS2 ;用补码表示结果CLR OV ;结果为正,原码即补码,计算成功RETMDS: CLR F0 ;结果符号初始化MOV A,R6 ;判断第二操作数的符号JNB ACC.7,MDS1;为正,不必处理CPL F0 ;为负,结果符号取反XCH A,R7 ;第二操作数取补,得到其绝对值CPL AADD A,#1XCH A,R7CPL AADDC A,#0MOV R6,AMDS1: MOV A,R2 ;判断第一操作数或运算结果的符号JNB ACC.7,MDS3;为正,不必处理CPL F0 ;为负,结果符号取反MDS2: MOV A,R5 ;求第一操作数的绝对值或运算结果的补码CPL AADD A,#1MOV R5,AMOV A,R4CPL AADDC A,#0MOV R4,AMOV A,R3CPL AADDC A,#0MOV R3,AMOV A,R2CPL AADDC A,#0MOV R2,AMDS3: CLR OV ;运算成功RET(12)标号:SH2功能:双字节二进制无符号数开平方(快速)入口条件:被开方数在R2、R3中。

出口信息:平方根仍在R2、R3中,整数部分的位数为原数的一半,其余为小数。

影响资源:PSW、A、B、R2~R7 堆栈需求:2字节SH2: MOV A,R2ORL A,R3JNZ SH20RET ;被开方数为零,不必运算SH20: MOV R7,#0 ;左规次数初始化MOV A,R2SH22: ANL A,#0C0H ;被开方数高字节小于40H否?JNZ SQRH ;不小于40H,左规格化完成,转开方过程CLR C ;每左规一次,被开方数左移两位MOV A,R3RLC AMOV F0,CCLR CRLC AMOV R3,AMOV A,R2MOV ACC.7,CMOV C,F0RLC ARLC AMOV R2,AINC R7 ;左规次数加一SJMP SH22 ;继续左规(13)标号:SH4功能:四字节二进制无符号数开平方(快速)入口条件:被开方数在R2、R3、R4、R5中。

出口信息:平方根在R2、R3中,整数部分的位数为原数的一半,其余为小数。

影响资源:PSW、A、B、R2~R7 堆栈需求:2字节SH4: MOV A,R2ORL A,R3ORL A,R4ORL A,R5JNZ SH40RET ;被开方数为零,不必运算SH40: MOV R7,#0 ;左规次数初始化MOV A,R2SH41: ANL A,#0C0H ;被开方数高字节小于40H否?JNZ SQRH ;不小于40H,左规格化完成MOV R6,#2 ;每左规一次,被开方数左移两位SH42: CLR C ;被开方数左移一位MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,ADJNZ R6,SH42 ;被开方数左移完两位INC R7 ;左规次数加一SJMP SH41 ;继续左规SQRH: MOV A,R2 ;规格化后高字节按折线法分为三个区间ADD A,#57HJC SQR2ADD A,#45HJC SQR1ADD A,#24HMOV B,#0E3H ;第一区间的斜率MOV R4,#80H ;第一区间的平方根基数SJMP SQR3SQR1: MOV B,#0B2H ;第二区间的斜率MOV R4,#0A0H;第二区间的平方根基数SJMP SQR3SQR2: MOV B,#8DH ;第三区间的斜率MOV R4,#0D0H;第三区间的平方根基数SQR3: MUL AB ;与区间基点的偏移量乘区间斜率MOV A,BADD A,R4 ;累加到平方根的基数上MOV R4,AMOV B,AMUL AB ;求当前平方根的幂XCH A,R3 ;求偏移量(存放在R2R3中)CLR CSUBB A,R3MOV R3,AMOV A,R2SUBB A,BMOV R2,ASQR4: SETB C ;用减奇数法校正一个字节的平方根MOV A,R4 ;当前平方根的两倍加一存入R5R6中RLC AMOV R6,ACLR ARLC AMOV R5,AMOV A,R3 ;偏移量小于该奇数否?SUBB A,R6MOV B,AMOV A,R2SUBB A,R5JC SQR5 ;小于,校正结束,已达到一个字节的精度INC R4 ;不小于,平方根加一MOV R2,A ;保存新的偏移量MOV R3,BSJMP SQR4 ;继续校正SQR5: MOV A,R4 ;将一个字节精度的根存入R2 XCH A,R2RRC AMOV F0,C ;保存最终偏移量的最高位MOV A,R3MOV R5,A ;将最终偏移量的低八位存入R5中MOV R4,#8 ;通过(R5R6/R2)求根的低字节SQR6: CLR CMOV A,R3RLC AMOV R3,ACLR CMOV A,R5SUBB A,R2JB F0,SQR7JC SQR8SQR7: MOV R5,AINC R3SQR8: CLR CMOV A,R5RLC AMOV R5,ADJNZ R4,SQR6 ;根的第二字节计算完,在R3中MOV A,R7 ;取原被开方数的左规次数JZ SQRE ;未左规,开方结束SQR9: CLR C ;按左规次数右移平方根,得到实际根MOV A,R2RRC AMOV R2,AMOV A,R3RRC AMOV R3,ADJNZ R7,SQR9SQRE: RET(14)标号:HASC功能:单字节十六进制数转换成双字节ASCII码入口条件:待转换的单字节十六进制数在累加器A中。

出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。

影响资源:PSW、A、B 堆栈需求:4字节HASC: MOV B,A ;暂存待转换的单字节十六进制数LCALL HAS1 ;转换低四位XCH A,B ;存放低四位的ASCII码SWAP A ;准备转换高四位HAS1: ANL A,#0FH ;将累加器的低四位转换成ASCII码ADD A,#90HDA AADDC A,#40HDA ARET(15)标号:ASCH功能:ASCII码转换成十六进制数入口条件:待转换的ASCII码(30H~39H或41H~46H)在A中。

出口信息:转换后的十六进制数(00H~0FH)仍在累加器A中。

影响资源:PSW、A 堆栈需求:2字节ASCH: CLR CSUBB A,#30HJNB ACC.4,ASH1SUBB A,#7ASH1: RET(16)标号:HBCD功能:单字节十六进制整数转换成单字节BCD码整数入口条件:待转换的单字节十六进制整数在累加器A中。

出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。

影响资源:PSW、A、B、R3 堆栈需求:2字节HBCD: MOV B,#100 ;分离出百位,存放在R3中MOV R3,AMOV A,#10 ;余数继续分离十位和个位XCH A,BDIV ABSWAP AORL A,B ;将十位和个位拼装成BCD码RET(17)标号:HB2功能:双字节十六进制整数转换成双字节BCD码整数入口条件:待转换的双字节十六进制整数在R6、R7中。

出口信息:转换后的三字节BCD码整数在R3、R4、R5中。

影响资源:PSW、A、R2~R7 堆栈需求:2字节HB2: CLR A ;BCD码初始化MOV R3,AMOV R4,AMOV R5,AMOV R2,#10H ;转换双字节十六进制整数HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5 ;BCD码带进位自身相加,相当于乘2ADDC A,R5DA A ;十进制调整MOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整DJNZ R2,HB3 ;处理完16bitRET(18)标号:HBD功能:单字节十六进制小数转换成单字节BCD码小数入口条件:待转换的单字节十六进制小数在累加器A中。

出口信息:CY=0时转换后的BCD码小数仍在A中。

CY=1时原小数接近整数1。

影响资源:PSW、A、B 堆栈需求:2字节HBD: MOV B,#100 ;原小数扩大一百倍MUL ABRLC A ;余数部分四舍五入CLR AADDC A,BMOV B,#10 ;分离出十分位和百分位DIV ABSWAP AADD A,B ;拼装成单字节BCD码小数DA A ;调整后若有进位,原小数接近整数1RET(19)标号:HBD2功能:双字节十六进制小数转换成双字节BCD码小数入口条件:待转换的双字节十六进制小数在R2、R3中。

出口信息:转换后的双字节BCD码小数仍在R2、R3中。

影响资源:PSW、A、B、R2、R3、R4、R5 堆栈需求:6字节HBD2: MOV R4,#4 ;四位十进制码HBD3: MOV A,R3 ;原小数扩大十倍MOV B,#10MUL ABMOV R3,AMOV R5,BMOV A,R2MOV B,#10MUL ABADD A,R5MOV R2,ACLR AADDC A,BPUSH ACC ;保存溢出的一位十进制码DJNZ R4,HBD3 ;计算完四位十进制码POP ACC ;取出万分位MOV R3,APOP ACC ;取出千分位SWAP AORL A,R3 ;拼装成低字节BCD码小数MOV R3,APOP ACC ;取出百分位MOV R2,APOP ACC ;取出十分位SWAP AORL A,R2 ;拼装成高字节BCD码小数MOV R2,ARET(20)标号:BCDH功能:单字节BCD码整数转换成单字节十六进制整数入口条件:待转换的单字节BCD码整数在累加器A中。

出口信息:转换后的单字节十六进制整数仍在累加器A中。

相关文档
最新文档