8进制除法汇编程序
汇编语言指令大全-(1)
否则(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
51单片机汇编语言教程:11课单片机算术运算指令
51 实验板推荐(点击下面的图片可以进入下载资料链接)
ห้องสมุดไป่ตู้HJ-1G
HJ-3G
推荐使用慧净 51 实验板。推荐 51 学习网 淘宝网:/
除法一般会出现小数但计算机中可没法直接表达小数它用的是我们小学生还没接触到小数时用的商和余数的概念如135其商是2余数是除了以后商放在a中余数放在b中
51 单片机汇编语言教程-慧净电子会员收集整理 (全部 28 课)
51 单片机汇编语言教程:第 11 课-单片机算术运算指令
(基于 HJ-1G、HJ-3G 实验板) 不带进位位的单片机加法指令 ADD A,#DATA ;例:ADD A,#10H ADD A,direct ;例:ADD A,10H ADD A,Rn ;例:ADD A,R7 ADD A,@Ri ;例:ADD A,@R0 用途:将 A 中的值与其后面的值相加,最终结果否是回到 A 中。 例:MOV A,#30H ADD A,#10H 则执行完本条指令后,A 中的值为 40H。 下面的题目自行练习 MOV 34H,#10H MOV R0,#13H MOV A,34H ADD A,R0 MOV R1,#34H ADD A,@R1 带进位位的加法指令 ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data 用途:将 A 中的值和其后面的值相加,并且加上进位位 C 中的值。 说明:由于 51 单片机是一种 8 位机,所以只能做 8 位的数学运算,但 8 位运算的范围只有 0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将 2 个 8 位的数学运算合起 来,成为一个 16 位的运算,这样,能表达的数的范围就能达到 0-65535。如何合并呢?其 实很简单,让我们看一个 10 进制数的例程: 66+78。 这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做 6+8(低位), 然后再做 6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做 罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个 数超过了一位数所能表达的范置(0-9)。 在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一 点加进去。那么计算机中做 16 位加法时同样如此,先做低 8 位的,如果两数相加产生了进 位,也要“点一下”做个标记,这个标记就是进位位 C,在 PSW 中。在进行高位加法是将这 个 C 加进去。例:1067H+10A0H,先做 67H+A0H=107H,而 107H 显然超过了 0FFH,因此 最终保存在 A 中的是 7,而 1 则到了 PSW 中的 CY 位了,换言之,CY 就相当于是 100H。 然后再做 10H+10H+CY,结果是 21H,所以最终的结果是 2107H。 带借位的单片机减法指令 SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data
进制计数法专题数学教案示例精选15篇
进制计数法专题数学教案示例精选15篇在每学期开学之前,老师们都要为自己之后的教学做准备。
有的老师会在很久之前就精心制作一份教学计划。
这样不仅拉进了学生与自己的距离,还让学生学到了知识,那么老师怎样写才会喜欢听课呢?编辑收集整理了一些“进制计数法专题数学教案示例”,欢迎您参考,希望对您有所助益。
进制计数法专题数学教案示例篇1教学内容:教材练习四5~9。
教学目标:1、通过加减口算,使学生比较熟练地掌握口算方法。
2、进一步巩固应用题的解题方法,指导学生正确选用条件计算所求问题。
教学过程:一、计算练习。
1、练习四5。
1)先估计一下下面每题的得数各是几十多,说说你是怎样想的?2)口算出结果并与估计的结果进行比较,集体订正2 、练习四4。
1)独立完成,集体交流。
2)补充六道题,先说出每道题的运算顺序是什么,再计算。
6+(6+4) 89(2620)87105 9+(487)二、应用题练习。
1、练习四7。
1)出示第7题的统计表,说说从这张统计表中你知道了什么?2)如果要求小明比小红多跳几下应选择什么条件?(学生解答,。
集体交流)3)如果要求小红比小华少跳几下应选择什么条件?(学生解答,集体交流)4)你还能提出什么问题?(学生独立提问题解答,集体交流。
)2、练习四8。
1)出示第8题,说说从图中你知道些什么?(有50名同学加入少先队,有54条红领巾够不够?)2)有50位同学加入少先队,54条红领巾够不够为什么?3)你知道红领巾多多少条吗?怎样算?为什么这样算?3、练习四9。
1)出示第9题,指名说图题。
2)一共拿来40个鼠标,有46台电脑,这些鼠标够不够?为什么?(4046,所以不够)3)你能提出什么问题?(学生独立提问解答,集体交流。
)三、作业布置。
四、教学后记:通过赛一赛的练习形式,调动学生的学习兴趣。
进制计数法专题数学教案示例篇2教学目标1.理解反比例的意义。
2.能根据反比例的意义,正确判断两种量是否成反比例。
微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例
/webnew/
第5章 运算程序设计及应用举例 章
5.1.4 除法指令 1.无符号数除法指令DIV (Unsigned Divide Instruction) 指令格式:DIV SRC (AX) (SRC) (AX)/(SRC)商、AH AH (AX) (AX)/ 功能:如果SRC是字节操作数,则把AX中的无符号数除以SRC,得到8位 的商送AL中,8位的余数送AH中,即:AL AL 8 AH AL (SRC)余数。 如果SRC是字操作数,则把DX和AX中的无符号数除以SRC,得到16位的 商送AX中,16位的余数送DX中,即:AX (DX,AX)/(SRC)余数。 指令对标志位的影响无定义。 (DX,AX)/(SRC)商、DX
IMUL指令除了运算对象是有符号数之外,其它都与MUL指令一样,但计算结果 不同。如果乘积的高半部分有符号扩展,则CF=OF=0,否则CF=OF=1。 例5.8 有符号数0B4H与11H相乘。 MOV AL,0B4H MOV BL,11H IMUL BL ;(AL)=0B4H=-76D ;(BL)=11H=17D ;AX)=(AL)×(BL)=(-76)×17=-1292D=0FAF4H ;CF=OF=1
/webnew/
第5章 运算程序设计及应用举例 章
例5.4 DATA SUB1 SUB2 SUB3 DATA 双精度数带借位减法运算。 SEGMENT DW 7788H,5566H DW 3344H,1122H DW 0,0 ENDS … MOV AX,SUB1 SUB AX,SUB2 MOV SUB3,AX MOV AX,SUB1+2 SBB AX,SUB2+2 MOV SUB3+2,AX …
/webnew/
第5章 运算程序设计及应用举例 章
8进制高精度除法
program 8_divide; { 八进制高精度除法 }
const
str2:string[32]='000 001 010 011 100 101 110 111 ';
str8:string[32]='0 1 2 3 4 5 6 7 ';
var a1,a2: string;
else begin
j:=i1;
repeat
a[j]:=succ(succ(a[j]));
a[j-1]:=pred(a[j-1]);
j:=j-1;
until a[j]='0';
c:='1'+c
end;
end;
while (c[1]='0') and (length(c)>1) do delete(c,1,1)
var i,i1,j,lb:integer;
begin
flag:=true;lb:=length(b);
while length(a)<lb do a:='0'+a;
while (length(a)>lb) and (a[1]='0') do delete(a,1,1);
if (a<b) and (length(a)=lb)
while (e[1]='0') and (length(e)>1) do delete(e,1,1);
writeln('..........',e);
end;
begin{main}
八进制的运算规则
八进制的运算规则八进制是一种常见的计数系统,它使用0到7这8个数字来表示数值。
在八进制下进行运算时,需要遵循一些特定的规则。
本文将介绍八进制的运算规则,包括加法、减法、乘法和除法。
一、八进制加法的规则在八进制加法中,当两个八进制数相加时,从最低位开始逐位相加。
如果相加的结果大于等于8,则需要进位。
具体步骤如下:1. 从最低位开始,将两个八进制数对应位上的数字相加;2. 如果相加的结果大于等于8,则需要进位,进位的值为1;3. 将进位的值加到下一位的相加结果上;4. 重复以上步骤,直到所有位上的数字都相加完毕。
例如,计算八进制数4567和1234的和:4567+ 1234-------6023二、八进制减法的规则在八进制减法中,当两个八进制数相减时,从最低位开始逐位相减。
如果被减数小于减数,则需要向高位借位。
具体步骤如下:1. 从最低位开始,将被减数的对应位上的数字减去减数的对应位上的数字;2. 如果被减数小于减数,则需要向高位借位,借位的值为8;3. 将借位的值减去被减数的下一位上的数字;4. 重复以上步骤,直到所有位上的数字都相减完毕。
例如,计算八进制数4567减去1234的差:4567- 1234-------3333三、八进制乘法的规则在八进制乘法中,使用乘法表进行计算。
具体步骤如下:1. 将被乘数和乘数的每一位分别相乘;2. 将乘积相加得到结果。
例如,计算八进制数4567乘以1234的积:4567× 1234-------43778四、八进制除法的规则在八进制除法中,使用长除法进行计算。
具体步骤如下:1. 将除数的最高位与被除数的最高位相除,得到商和余数;2. 将商写在结果的对应位上;3. 将余数与下一位的数值合并,再次进行除法运算;4. 重复以上步骤,直到被除数的所有位都计算完毕。
例如,计算八进制数4567除以1234的商和余数:3-------1234| 45673702----864615---249通过以上的介绍,我们了解了八进制的加法、减法、乘法和除法的规则。
汇编命令大全
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它们的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
EAX:累加器
EBX:基址寄存器
ECX:计数器
EDX:数据寄存器
ESI:源地址指针寄存器
WAIT:置处理器于等待状态
11.堆栈操作
ENTER:建立堆栈帧
LEAVE:结束堆栈帧
POP:字出栈
POPF:标志出栈
POPA:所有通用寄存器出栈
PUSH:字进栈
PUSHA:所有通用积存器进栈
PUSHF:标志进栈
12.串操作
CMPS:串比较
CDQ:双字转换为四字
CWD:字转换为双字
CWDE:字转换为扩展的双字
反汇编出来的代码是像这样的
00408254 |. 837D 0C 00 CMP DWORD PTR SS:[EBP+C],0
00408258 |. 57 PUSH EDI
00408259 |. 0F84 20010000 JE scanner.0040837F
ata NOT r/m
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
功能: 移位指令
语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
标志位: C,P,A,Z,O
JMP
功能: 跳往指定地址执行
语法: JMP 地址
51单片机汇编程序设计之算数运算指令
1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减
汇编语言程序设计课后习题答案(第二版_沈美明)(无删减)
汇编语言程序设计课后习题答案(第二版_沈美明)(无删减)第一章1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=2551.3 将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2)1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
计算机组成原理名词解释
计算机组成原理名词解释IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】一、名词解释:(第一章的名称解释是考试的重点)1.主机:由CPU、存储器与I/O接口合在一起构成的处理系统称为主机。
:中央处理器,是计算机的核心部件,由运算器和控制器构成。
3.运算器:计算机中完成运算功能的部件,由ALU和寄存器构成。
:算术逻辑运算单元,负责执行各种算术运算和逻辑运算。
5.外围设备:计算机的输入输出设备,包括输入设备,输出设备和外存储设备。
6.数据:编码形式的各种信息,在计算机中作为程序的操作对象。
7.指令:是一种经过编码的操作命令,它指定需要进行的操作,支配计算机中的信息传递以及主机与输入输出设备之间的信息传递,是构成计算机软件的基本元素。
8.透明:在计算机中,从某个角度看不到的特性称该特性是透明的。
9.位:计算机中的一个二进制数据代码,计算机中数据的最小表示单位。
10.字:数据运算和存储的单位,其位数取决于具体的计算机。
11.字节:衡量数据量以及存储容量的基本单位。
1字节等于8位二进制信息。
12.字长:一个数据字中包含的位数,反应了计算机并行计算的能力。
一般为8位、16位、32位或64位。
13.地址:给主存器中不同的存储位置指定的一个二进制编号。
14.存储器:计算机中存储程序和数据的部件,分为内存和外存。
15.总线:计算机中连接功能单元的公共线路,是一束信号线的集合,包括数据总线。
地址总线和控制总线。
16.硬件:由物理元器件构成的系统,计算机硬件是一个能够执行指令的设备。
17.软件:由程序构成的系统,分为系统软件和应用软件。
18.兼容:计算机部件的通用性。
19.软件兼容:一个计算机系统上的软件能在另一个计算机系统上运行,并得到相同的结果,则称这两个计算机系统是软件兼容的。
20.程序:完成某种功能的指令序列。
21.寄存器:是运算器中若干个临时存放数据的部件,由触发器构成,用于存储最频繁使用的数据。
八进制的算法
八进制的算法八进制是一种常见的数制系统,它使用0-7这8个数字表示数值。
八进制的算法是指在八进制数的基础上进行各种数学运算和逻辑操作的方法。
一、八进制的表示方法八进制数采用与二进制和十六进制类似的表示方法,每一位上的数值乘以相应的权值,再求和得到十进制的结果。
例如,八进制数237表示为:2×8² + 3×8¹ + 7×8⁰ = 2×64 + 3×8 + 7×1 = 159二、八进制的加法八进制的加法与十进制的加法类似,只是进位的基数从10变为8。
例如,计算八进制数725和八进制数364的和:725+ 364------1111三、八进制的减法八进制的减法与十进制的减法类似,只是借位的基数从10变为8。
例如,计算八进制数725减去八进制数364的差:725- 364------361四、八进制的乘法八进制的乘法与十进制的乘法类似,只是进位的基数从10变为8。
例如,计算八进制数725乘以八进制数4的积:725× 4------2900五、八进制的除法八进制的除法与十进制的除法类似,只是进位的基数从10变为8。
例如,计算八进制数725除以八进制数4的商:725÷ 4------175六、八进制的逻辑操作在八进制的逻辑操作中,常用的有与、或、非、异或等运算。
这些运算符用于对八进制数的每一位进行逻辑运算。
例如,对八进制数725和八进制数364进行与运算:725& 364------304七、八进制的位移操作八进制的位移操作是指将八进制数的每一位向左或向右移动指定的位数。
向左移动相当于乘以8的幂,向右移动相当于除以8的幂。
例如,将八进制数725向左移动2位:725 << 2 = 725 × 8² = 5800八、八进制的转换八进制数可以与其他进制数进行转换,最常见的是与二进制和十进制的转换。
MCU加、减、乘、除法
HT MCU加、减、乘、除法文件编码:HA0014s简介:本程序包含八位、十六位、二十四位及三十二位定点数据的基本运算。
基本的运算包括:加法(有符号、无符号)、减法(有符号、无符号)、乘法(有符号、无符号)、除法(有符号、无符号)、BCD码的加、减法、BCD码与二进制码的相互转换等等。
DRIVER的使用说明:一,driver的使用对于进行八位、十六位、二十四位及三十二位数据的基本运算,总共提供了个48driver。
使用时将分别用到一个插入文件CALCULATE.INC和一个汇编源文件CALCULATE.ASM。
在HT -IDE2000开发环境下,在使用所提供的接口函数前按下述的操作步骤做:步骤1:把CALCULATE.ASM加到项目下(用[Project/Edit]指令)步骤2:根据将要使用到的参与运算的数据的长度,修改CALCULATE.INC文件中的定义(屏蔽或打开相应的define语句)。
步骤3:在你的程式中插入“include calculate.inc”语句二,各个driver的详细说明(一) 八位定点数据运算driver1, Driver Name: UNBIN_ADD_8Description:八位无符号数加法运算Parameter:被加数--- data0加数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:无2, Driver Name: BIN_ADD_8Description:八位有符号数加法运算Parameter:被加数--- data0加数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:无3, Driver Name: UNBIN_SUB_8Description:八位无符号数减法运算Parameter :被减数---data0减数--- data4Return: to1,to0(to1为高8位,to0为低8位)Stack used:无4, Driver Name: BIN_SUB_8Description:八位有符号数减法运算Parameter:被减数---data0减数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:15, Driver Name: UNBIN_MUL_8Description:八位无符号数乘法运算Parameter:被乘数---data0乘数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:无6, Driver Name: BIN_MUL_8Description:八位有符号数乘法运算Parameter:被乘数---data0乘数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used: 17, Driver Name: UNBIN_DIV_8Description:八位无符号数除法运算Parameter:被除数---data0除数---data4Return: to0Stack used:无8, Driver Name: BIN_DIV_8Description:八位有符号数除法运算Parameter:被除数---data0除数---data4Return: to0Stack used: 19, Driver Name: BCD_ADD_8Description:八位BCD码加法运算Parameter:被加数---data0加数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:无Name:BCD_SUB_810, DriverDescription:八位BCD码减法运算Parameter:被减数---data0减数---data4to0(to1为高8位,to0为低8位)Return: to1,Stack used:无11, DriverName:BINTOBCD_8Description:八位二进制转BCD码Parameter:要进行转换的二进制数---data0to0(to1为高8位,to0为低8位)Return: to1,Stack used:无Name:BCDTOBIN_812, DriverDescription:八位BCD码转二进制Parameter:要进行转换的BCD码数--- data0Return: to0Stack used:无(二) 十六位定点数据运算driver1, river Name: UNBIN_ADD_16Description:十六位无符号数加法运算Parameter:被加数---data1, data0(data1为高8位,data0为低8位)加数---data5, data4(data5为高8位,data4为低8位)to1,to0(to2为第16~23位,to1为第8~15,to0为第0~7位)Return: to2,Stack used:无2, Driver Name: BIN_ADD_16Description:十六位有符号数加法运算Parameter:被加数---data1, data0(data1为高8位,data0为低8位)加数---data5, data4(data5为高8位,data4为低8位)to0(to2为第16~23位,to1为第8~15位,to0为第0~7 Return: to2,to1,位)Stack used:无3, Driver Name: UNBIN_SUB_16Description:十六位无符号数减法运算Parameter :被减数---data1, data0(data1为高8位,data0为低8位)减数---data5, data4(data5为高8位,data4为低8位)Return:to2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无4, Driver Name: BIN_SUB_16Description:十六位有符号数减法运算Parameter:被减数---data1, data0(data1为高8位,data0为低8位)减数---data5, data4(data5为高8位,data4为低8位)Return:to2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:15, Driver Name: UNBIN_MUL_16Description:十六位无符号数乘法运算Parameter:被乘数---data1, data0(data1为高8位,data0为低8位)乘数---data5, data4(data5为高8位,data4为低8位)Return:to3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无6, Driver Name: BIN_MUL_16Description:十六位有符号数乘法运算Parameter:被乘数---data1, data0(data1为高8位,data0为低8位)乘数---data5, data4(data5为高8位,data4为低8位)Return:to3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1第为8~15位,to0为第0~7位)Stack used: 17, Driver Name: UNBIN_DIV_16Description:十六位无符号数除法运算Parameter:被除数---data1, data0(data1为高8位,data0为低8位)除数---data5, data4(data5为高8位,data4为低8位)to0(to1为第8~15位,to0为第0~7位)Return: to1,Stack used:无8, Driver Name: BIN_DIV_16Description:十六位有符号数除法运算Parameter:被除数---data1, data0(data1为高8位,data0为低8位)除数---data5, data4(data5为高8位,data4为低8位)to0(to1为第8~15位,to0为第0~7位)Return: to1,Stack used: 19, Driver Name: BCD_ADD_16Description:十六位BCD码加法运算Parameter:被加数---data1, data0(data1为高8位,data0为低8位)加数---data5, data4(data5为高8位,data4为低8位)Return:to2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BCD_SUB_1610, DriverDescription:十六位BCD码减法运算Parameter:被减数---data1, data0(data1为高8位,data0为低8位)减数---data5, data4(data5为高8位,data4为低8位)Return:to2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BINTOBCD_1611, DriverDescription:十六位二进制转BCD码Parameter:要进行转换的二进制数--- data1, data0(data1为高8位,data0为低8位)Return:t o2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无12, DriverName:BCDTOBIN_16Description:十六位BCD码转二进制Parameter:要进行转换的BCD码数--- data1, data0(data1为高8位,data0为低8位)to0(to1第为8~15位,to0为第0~7位)Return: to1,Stack used:无(三) 二十四位定点数据运算driver1, river Name: UNBIN_ADD_24Description:二十四位无符号数加法运算Parameter:被加数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)加数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无2, Driver Name: BIN_ADD_24Description:二十四位有符号数加法运算Parameter:被加数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)加数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无3, Driver Name: UNBIN_SUB_24Description:二十四位无符号数减法运算Parameter:被减数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)减数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:to3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无4, Driver Name: BIN_SUB_24Description:二十四位有符号数减法运算Parameter:被减数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)减数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:15, Driver Name: UNBIN_MUL_24Description:二十四位无符号数乘法运算Parameter:被乘数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)乘数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o5, to4, to3, to2, to1, to0(to5为第40位~47位,to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无6, Driver Name: BIN_MUL_24Description:二十四位有符号数乘法运算Parameter:被乘数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)乘数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o5, to4, to3, to2, to1, to0(to5为第40位~47位,to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used: 17, Driver Name: UNBIN_DIV_24Description:二十四位无符号数除法运算Parameter:被除数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)除数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o2, to1, to0 (to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无8, Driver Name: BIN_DIV_24Description:二十四位有符号数除法运算Parameter:被除数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)除数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o2, to1, to0 (to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used: 19, Driver Name: BCD_ADD_24Description:二十四位BCD码加法运算Parameter:被加数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)加数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BCD_SUB_2410, DriverDescription:二十四位BCD码减法运算Parameter:被减数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)减数---data6, data5, data4(data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BINTOBCD_2411, DriverDescription:二十四位二进制转BCD码Parameter:要进行转换的二进制数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BCDTOBIN_2412, DriverDescription:二十四位BCD码转二进制Parameter:要进行转换的BCD码数---data2, data1, data0(data2为第16~23位,data1为第8~15位,data0为第0~7位)Return:to2, to1, to0(to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无(四) 三十二位定点数据运算driver1, river Name: UNBIN_ADD_32Description:三十二位无符号数加法运算Parameter:被加数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)加数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0 (to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无2, Driver Name: BIN_ADD_32Description:三十二位有符号数加法运算Parameter:被加数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)加数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0 (to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无3, Driver Name: UNBIN_SUB_32Description:三十二位无符号数减法运算Parameter:被减数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)减数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0 (to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无4, Driver Name: BIN_SUB_32Description:三十二位有符号数减法运算Parameter:被减数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)减数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0(to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:15, Driver Name: UNBIN_MUL_32Description:三十二位无符号数乘法运算Parameter:被乘数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)乘数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o7, to6, to5, to4,to3, to2, to1, to0(to7为第56~63位,to6为第48~55位,to5为第40~47位,to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无6, Driver Name: BIN_MUL_32Description:三十二位有符号数乘法运算Parameter:被乘数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)乘数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o7, to6, to5, to4,to3, to2, to1, to0(to7为第56~63位,to6为第48~55位,to5为第40~47位,to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used: 17, Driver Name: UNBIN_DIV_32Description:三十二位无符号数除法运算Parameter:被除数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)除数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无8, Driver Name: BIN_DIV_32Description:三十二位有符号数除法运算Parameter:被除数---data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)除数---data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:to3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used: 19, Driver Name: BCD_ADD_32Description:三十二位BCD码加法运算Parameter:被加数--- data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)加数--- data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0(to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BCD_SUB_3210, DriverDescription:三十二位BCD码减法运算Parameter:被减数--- data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)减数--- data7, data6, data5, data4(data7为第24~31位,data6为第16~23位,data5为第8~15位,data4为第0~7位)Return:t o4, to3, to2, to1, to0(to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BINTOBCD_3211, DriverDescription:三十二位二进制转BCD码Parameter:要进行转换的二进制数--- data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)Return:to4, to3, to2, to1, to0(to4为第32~39位,to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无Name:BCDTOBIN_3212, DriverDescription:三十二位BCD码转二进制Parameter:要进行转换的BCD码数--- data3, data2, data1, data0(data3为第24~31位,data2为第16~23位,data1为第8~15位,data0为第0~7位)Return:t o3, to2, to1, to0(to3为第24~31位,to2为第16~23位,to1为第8~15位,to0为第0~7位)Stack used:无driver的保留字:data0, data1, data2, data3, data4, data5, data6, data7to0, to1, to2, to3, to4, to5, to6, to7com0, com1, com2, com3, com4, com5count0, count1, count2, count3unbin_add_8, unbin_sub_8, unbin_mul_8, unbin_div_8,bin_add_8, bin_sub_8, bin_mul_8, bin_div_8bcd_add_8, bcd_sub_8, bintobcd_8, bcdtobin_8unbin_add_16, unbin_sub_16, unbin_mul_16, unbin_div_16,bin_add_16, bin_sub_16, bin_mul_16, bin_div_16bcd_add_16, bcd_sub_16, bintobcd_16, bcdtobin_16unbin_add_24, unbin_sub_24, unbin_mul_24, unbin_div_24,bin_add_24, bin_sub_24, bin_mul_24, bin_div_24bcd_add_24, bcd_sub_24, bintobcd_24, bcdtobin_24unbin_add_32, unbin_sub_32, unbin_mul_32, unbin_div_32,bin_add_32, bin_sub_32, bin_mul_32, bin_div_32bcd_add_32, bcd_sub_32, bintobcd_32, bcdtobin_32。
x86汇编指令整理
x86汇编指令整理1,寻址⽅式1,⽴即数寻址MOV AX, 0102H ;AX←0102H2、寄存器寻址⽅式指令中指明某个寄存器其内容即为操作数,寄存器在CPU内,不⽤总线周期,执⾏速度快。
8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ESMOV AX, BX ;AX←BX3,直接寻址⽅式指令中直接给出操作数所在内存单元的有效地址(EA即偏移地址)默认的段地址在DS段寄存器,若在其它段可使⽤段超越前缀改变。
⽤⽅括号包含有效地址,表达存储单元的内容直接地址也可⽤标号代表,⽅括号可省略。
MOV AX, [2000H] ;AX←DS:[2000H]MOV AX, ES: [2000H] ;AX←ES:[2000H]4、寄存器间接寻址⽅式指令中给出的寄存器的内容包含操作数的有效地址。
间接寻址中使⽤的寄存器名要⽤⽅括号括起来1、基址寻址⽤BX或BP作间接寻址寄存器如:MOV AX,[BX] ;隐含在DS段MOV AX,[BP] ;隐含在SS段2、变址寻址⽤SI或DI作间接寻址寄存器如:MOV CL, [SI]MOV AX, [DI]单独使⽤SI或DI时,隐含在DS段中在串操作时,SI隐含在DS段中,DI隐含在ES段中。
3、相对基址寻址指令中给出基址寄存器及位移量,⼆者之和为操作数的有效地址。
位移量可以是8位或16位。
有效地址=BX/BP+8/16位位移量4、相对变址寻址指令中给出变址寄存器及位移量,⼆者之和为操作数的有效地址。
有效地址=SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可⽤段超越前缀改变MOV AX, [SI+06H] ;AX←DS:[SI+06H]MOV AX, 06H[SI] ;AX←DS:[SI+06H]5、基址变址寻址⽅式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可⽤段超越前缀改变 MOV AX, [BX+SI] ;AX←DS:[BX+SI]MOV AX, [BX][SI] ;AX←DS:[BX+SI]6、相对基址变址寻址⽅式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与⼀个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可⽤段超越前缀改变 MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6]MOV AX, 6[BX+DI] MOV AX, 6[BX][DI]各种寻址⽅式综合举例设BX=1200H DI=10A0H 位移量=2BC0HDS=2400H 求各种寻址⽅式下的有效地址和物理地址。
汇编语言程序设计练习题及参考答案
一、单项选择题从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。
1.用来存放下一条将要执行的指令地址的寄存器是(B)A.SP B.IP C.BP D.CS2.要使串处理从低地址向高地址进行,应把标志位置为(D)A.IF=1B.TF=0C.DF=1D.DF=03.使状态标志位CF清零的错误指令是(C)A.OR AX,AX B.SUB AX,AXC.MOV CF,0D.CLC4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B)A.SP=1112H B.SP=110EHC.SP=1111H D.SP=110FH5.汇编源程序出现语法错误的指令有(D)A.MOV[BX+SI],AL B.MOV AX,[BP+DI]C.MOV DS,AX D.MOV CS,AX6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D)A.STOSW B.LODSWC.SCASW D.CMPSW7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B)A.SHR BL,1B.SHL BL,1C.SAR BL,1D.RCR BL,18.执行PUSH AX指令的正确步骤是(A)A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-12.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+12.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+19.CF=1时转移到目标地址的条件转移指令是(B)A.JNC B.JC C.JZ D.JS10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C)A.对正数求补时,CF=0B.对负数求补时,CF=0C.对非零数求补时,CF=1D.对零求补时,CF=111.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A)A.目的操作数最高位为0B.目的操作数最高位为1C.目的操作数为任意情况D.无论什么情况都不可能相同12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D)A.AX=0032H B.AX=00E0HC.AX=03E0H D.AX=0FFE0H13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D)A.MOV AX,BUFl*BUF2B.MOV AX,BUF1/BUF2C.MOV AX,BUF1+ES:BUF2D.MOV AX,BUF2-BUF114.下面指令中,操作数的寻址方式为寄存器间接寻址的指令是(C )A.INC WORD PTR [BX+SI]B.INC CX,[SI+COUNT]C.NEG BYTE PTR [BX]D.ADD AX,B15.NUM EQU 80HDA DB 34HAND DA,NUM上述语句执行后,DA 中的内容是(D )A.0B4H B.80H C.34H D.016.直接、间接、立即三种寻址方式指令的执行速度,由快至慢的排序为(A )A.立即、直接、间接B.直接、间接、立即C.直接、立即、间接D.不一定17.语句DA1DB 2DUP(3,5,7)汇编后,该语句可等同于的语句是(D )A.DA1DB 3,5,7B.DA1DB 2,3,5,7C.DA1DB 3,5,7,2D.DA1DB 3,5,7,3,5,718.MOV AL,80HMOV CL,2SAR AL,CL上述指令序列执行后,结果是(D )A.AL=40H B.AL=20HC.AL=0C0H D.AL=0E0H19.下面是实现将AL 内容加1的压缩型BCD 码加法程序段,其中正确的指令序列是(A )A.INC AL B.ADD AL,1DAA DASC.ADD AL,1D.STCDAA AAA20.现有数据存储如图所示:30100H 30101H 30102H 30103H 设AL=01H,BX=0100H,DS=3000H 执行换码指令XLAT 后正确的结果是(B )A.AL=20H B.AL=38HC.AL=00H D.AL=41H21.若定义DAT DW 'A',则(DAT)和(DAT+1)两个相邻的内存中存放的数据是(B )A.0041H B.4100H 20H38H41H55HC.xx41H D.41xxH[注]选项C.和D.中的XX表示任意数据。
80X86常用汇编指令集
80X86常用汇编指令集ZZ作者 : 赵振东ZZD学习汇编语言,最关键的就在于汇编指令集的掌握以及计算机工作方式的理解,以下是80X86汇编过程中经常用到的一些汇编指令。
从功能分类上来说,一共可分为一、数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF、POPF、CBW、CWD、CWDE。
二、算术指令:ADD、ADC、INC、SUB、SBB、DEC、CMP、MUL、DIV、DAA、DAS、AAA、AAS。
三、逻辑指令:AND、OR、XOR、NOT、TEST、SHL、SAL、SHR、SAR、RCL、RCR、ROL、ROR。
四、控制转移指令:JMP、Jcc、JCXZ、LOOP、LOOPZ、LOOPNZ、LOOPNE、CALL、RET、INT。
五、串操作指令:MOVS、LODS、STOS、CMPS、SCAS。
六、标志处理指令:CLC、STC、CLD、STD。
七、32位CPU新增指令(后续补充并完善)除上述的一些指令外,还有许多32位80X86CPU新增指令,这些指令有时会简化程序设计,不过由于我也是刚刚学习汇编,这些都是从书上看到的,所以很多还不是十分了解,我写这些的目的仅仅是想让自己能更好的去记住这些指令的作用和用法,同事也希望和我一样刚入门的朋友能够多了解一些,并没有其他目的,所有的示例也并没有经过实际的代码测试,所以希望各位朋友,不管你喜欢不喜欢,反对不反对,请文明发言,谢谢!------------------------------------------------数据传送指令开始-------------------------------------------------------1、MOV(传送)指令写法:MOV target,source功能描述:将源操作数source的值复制到target中去,source值不变注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。
用汇编语言实现多字节乘法计算
用汇编语言实现多字节乘除法计算CPU一般都提供乘除法运算指令,不过能够直接运算的乘除法受限于CPU的字长,如MCS-51单片机是8位的,就只能计算8位二进制乘除法,也就是被乘数、乘数、被除数、除数都小于256的计算。
如果需要计算的数据较大怎么办?加减法我们还可以用先加/减低字节,再带进/借位加/减高字节的方法来计算,但乘除法这样子显然不行。
下面通过分析二进制乘法的计算特点介绍通用的部分积右移乘法运算:首先看乘法,列竖式我们都会的,二进制乘法和十进制的其实也差不多,都是按位相乘,再将各部分积错位相加,不同的是二进制乘法各位相乘时结果只有两种:乘数该位为0时乘积为0,乘数该位为1时乘积即被乘数本身。
如下图所示:图1 二进制乘法竖式计算过程这是一个8位二进制数乘法,过程简明易懂,但是我们怎么将这个过程转化为汇编语言程序呢?下面是根据图1竖式设计的程序流程,很容易看懂,但对于写程序来讲就比较繁琐了,对于乘数的每一位处理方法都不一样,对于每一位乘数我们都要判断它是第几位,然后它和被乘数的积要左移几位相加,这样编出来的程序冗长而且效率很低。
其实我们反过来看,乘数由低到高位每位对应的乘积依次左移一位相加,和每次乘积不动而将结果右移一位相加效果是不是一样的呢?如图3所示:乘数第1位=1?积存储器清零积+被乘数积+0YN乘数第2位=1?积+被乘数左移1位积+0YN乘数第3位=1?积+被乘数左移2位积+0YN。
图2 乘法流程图图3 部分积右移乘法计算过程如此详细的图示相信大家都看明白了,图中第二步到第九步所有的操作都是一样的,乘数带进位右移→积+被乘数或0→积右移。
因此我们可以用循环的方法来设计程序,对于上述8位*8位的乘法需要循环8次,循环次数取决于乘数的位数。
用这样的算法,不管数据的长度是多少,每一位的操作都是一样的,只需要根据乘数的位数修改循环次数就可以了。
下面给出long类型,也就是32位数据的乘法计算程序流程。
八进制除法——精选推荐
⼋进制除法93年的全国赛的题,让我有点要是早⽣⼗年的感慨啊。
⾔归正传,我们来看⼀下我的第三题,两个⼋进制除法,确实有那么点复杂滴。
【问题描述】从⽂件读⼊以字符串形式的两个⾼精度8进制正整数,串长⼩于255,以第⼀个数为被除数,第⼆个数为除数,进⾏⾼精度除法运算,输出商和余数。
【输⼊】⽂件有两⾏,每⾏⼀个⼋进制正整数。
(若输⼊数据有误,请输出INPUT ERROR!)【输出】有两⾏,第⼀⾏为商,第⼆⾏为余数【样例】Eigh.in1234438Eigh.outINPUT ERROR!算法分析:1先判断这个数是否是⼋进制数,是没有错误滴数据2 把除数先从1-7所有的情况都⽤乘法算出来,并存储在⼀个字符串数组中3 ⾸先找到⽐除数⼤的被除数的位数,然后再减去之后再加上原来的位数加上⼀,不要加太多因为可能只要再加⼀位⼜刚好可以除了4⼀直除知道被除数没有数为⽌易错滴地⽅⽊,我给你做个记号咯,亲vars1,s2:string;a:array[1..7] of string;i:integer;procedure check(s:string);vari:integer;beginfor i:=1 to length(s) doif not (s[i] in ['0'..'7']) thenbeginwriteln('INPUT ERROR!');HALT;end;end;{检查是否是可以计算滴}procedure mul(s:string;x:integer);varlen,i,m:integer;c:array[1..1000] of integer;beginfillchar(c,sizeof(c),0);{亲⼀地要记得清零,否则后果⾃负~~~~ } len:=length(s);for i:=1 to len doc[len-i+1]:=ord(s[i])-48;for i:=1 to len doc[i]:=c[i]*x;for i:=1 to len dobeginc[i+1]:=c[i+1]+c[i] div 8;c[i]:=c[i] mod 8;end;m:=c[len+1];while m<>0 dobegininc(len);c[len]:=m mod 8;m:=m div 10;end;a[x]:='';for i:=1 to len do a[x]:=chr(c[i]+48)+a[x];end;{乘法}function compare(s1,s2:string):boolean;vart:integer;if length(s1)>length(s2) then exit(false)else if length(s2)>length(s1) then exit(true)else begint:=1;while (s1[t]=s2[t]) and (t<=length(s1)) do inc(t);{t滴条件是绝对不能少滴哩} if s1[t]>s2[t] then exit(false)else exit(true);end;end;{⽐较哪个字符串更加⼤}function sub(s1,s2:string):string;varl1,i,l2:integer;a,b:array[1..1000] of integer;beginl1:=length(s1);l2:=length(s2);FILLCHAR(A,SIZEOF(a),0);fillchar(b,sizeof(b),0);for i:=1 to l1 do a[l1-i+1]:=ord(s1[i])-48;for i:=1 to l2 do b[l2-i+1]:=ord(s2[i])-48;for i:=1 to l1 dobeginif a[i]begindec(a[i+1]);inc(a[i],8);{这是⼋进制诶,不要搞错哩‘’}end;a[i]:=a[i]-b[i];end;while (l1>0) and (a[l1]=0) do dec(l1);sub:='';for i:=1 to l1 do sub:=chr(a[i]+48)+sub;if sub='' then sub:='0';end;{两个⾼精度数相减}procedure division;{加油}s:string;c,d:array[1..1000] of integer;t,m,len1,len2:longint;beginfillchar(c,sizeof(c),0);{亲,清零重要}len1:=length(s1);for i:=1 to len1 do c[i]:=ord(s1[i])-48;t:=1;s:='';s:=s+chr(c[t]+48);m:=0;while not(compare(a[1],s)) and (tbegininc(t);s:=s+chr(c[t]+48);end;{找到了⼀个⽐除数⼤的被除数中间的位数}fillchar(d,sizeof(d),0);{亲,清零}while t<=len1 dobeginif not (compare(a[1],s)) thenbegininc(m);d[m]:=0;inc(t);{加1跳出这个循环,以便正常输出}end{如果被除数的最⼤数也⽆法⼤于除数就把这个看做是商为0}else beginfor i:=1 to 7 do{可以整除时就⼀个⼀个去套}if ((i=7) and (compare(a[i],s))) or{如果是*7就不要考虑i+1是否会⼩于这个数}((compare(a[i],s)) and not(compare(a[i+1],s))) then{这个数必须在某两个数之间} begininc(m);d[m]:=i;if t当还有位数可以再去⽤来整除的时候就必须要再往后再加上⼀位}else s:=sub(s,a[i]);inc(t);break;end;end;end;t:=1;while (tfor i:=1 to m do write(d[i]);writeln;writeln(s);end;{最难的除法了,加油看}beginassign(input,'eigh.in');reset(input);assign(output,'eigh.out');rewrite(output);readln(s1);readln(s2);if s2='0'then begin writeln('INPUT ERROR!');halt; end; check(s1);check(s2);a[1]:=s2;for i:=2 to 7 do mul(s2,i);division;close(input);close(output);end.。
八进制除法口诀表
八进制除法口诀表是一种帮助记忆和理解八进制除法规则的方法,通过口诀的方式简化复杂的计算过程。
以下是八进制除法口诀表的示例:
1.“一除二商三,余数再除三,商零余七除,商三余四除,七上八下除以
二。
”
这个口诀描述了如何进行八进制数除以2、3、4、7和8的除法计算。
例
如,“一除二商三”表示被除数为1时,除以2的商为3;“余数再除三”
表示在第一次除法的余数再除以3。
以此类推,可以得出完整的口诀表。
2.“除1余数8,除2余数7,除3余数6,除4余数5,除5余数4,除6余
数3,除7余数2,余数必须为1。
”
这个口诀描述了被除数和余数之间的关系。
例如,“除1余数8”表示当被除数为1时,除以任何大于1的数得到的余数为8的倍数加1。
同样地,其他行也有类似的规律。
这些口诀可以帮助初学者记忆和掌握八进制除法的计算方法。
但需要注意的是,这些口诀只是记忆的辅助工具,对于更复杂的计算还需要通过实际练习来掌握。
八进制四则运算
八进制四则运算八进制的四则运算是一种特殊的数学运算方法,它以八个数字0-7为基础进行计算。
在这种运算中,我们可以进行加法、减法、乘法和除法等操作,但是需要遵循一定的规则和步骤。
我们来介绍一下八进制数的表示方法。
八进制数是以数字8为基数的数系统,它使用0-7这8个数字来表示所有的数。
与十进制数类似,八进制数的每一位表示的是8的幂,从右向左的位数依次增大。
例如,八进制数123表示的是1×8²+2×8¹+3×8⁰=83的十进制数。
在进行八进制的四则运算时,我们需要将参与运算的数转换成八进制形式,然后按照正常的运算规则进行计算。
下面我们来看几个例子:例1:计算八进制数162和八进制数47的加法运算。
首先将162和47转换成八进制形式,得到八进制数242和八进制数57。
然后按照十进制的加法规则进行计算,从右向左依次相加,并将进位带到下一位。
最后得到的结果是八进制数301。
例2:计算八进制数235和八进制数56的减法运算。
同样地,先将235和56转换成八进制形式,得到八进制数353和八进制数70。
然后按照十进制的减法规则进行计算,从右向左依次相减,如果被减数小于减数,则需要向高位借位。
最后得到的结果是八进制数203。
例3:计算八进制数37和八进制数5的乘法运算。
将37和5转换成八进制形式,得到八进制数45和八进制数5。
然后按照十进制的乘法规则进行计算,先将5分别乘以4和5,得到20和25,然后将这两个数相加得到45。
最后得到的结果是八进制数45。
例4:计算八进制数76和八进制数2的除法运算。
将76和2转换成八进制形式,得到八进制数114和八进制数2。
然后按照十进制的除法规则进行计算,先将114除以2,得到57,然后将57除以2,得到28,再将28除以2,得到14,最后将14除以2,得到7。
最后得到的结果是八进制数7。
通过以上的例子,我们可以看出在八进制数的四则运算中,我们需要将参与运算的数转换成八进制形式,然后按照十进制的运算规则进行计算。
十进制转八进制c语言
十进制转八进制c语言概述在计算机科学中,数制转换是一个重要的基础知识。
十进制转八进制是其中的一种常见转换方式。
在本文中,我们将学习如何使用C语言编写一个能够实现十进制转八进制的程序。
原理解析要将十进制数转换为八进制数,我们需要了解两个数制之间的转换规则。
在十进制系统中,每一位的权值分别为10的0次方、10的1次方、10的2次方…以此类推。
而在八进制系统中,每一位的权值分别为8的0次方、8的1次方、8的2次方…以此类推。
将十进制数转换为八进制数的步骤如下: 1. 将十进制数不断除以8,直到商为0为止,得到的余数就是八进制数的最低位。
2. 将得到的余数由下往上依次排列,得到的数就是八进制数。
程序设计为了实现十进制转八进制的功能,我们将采用逐步除法法实现。
具体的C代码如下所示:#include <stdio.h>void decimalToOctal(int decimal) {int octalNum[100];int i = 0;while (decimal != 0) {octalNum[i] = decimal % 8;decimal = decimal / 8;i++;}printf("转换为八进制的结果为:");for (int j = i - 1; j >= 0; j--) {printf("%d", octalNum[j]);}}int main() {int decimal;printf("请输入一个十进制数:");scanf("%d", &decimal);decimalToOctal(decimal);return 0;}程序解析让我们一步一步地解析上述代码。
首先,我们定义了一个名为decimalToOctal的函数,该函数用于将十进制数转换为八进制数。
我们使用了一个整型数组octalNum来存储转换后的八进制数,数组的大小设定为100,可根据需要进行调整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
POP DX
MOV AX,DX
XOR DX,DX
DIV BX
MOV BX,8
MOV CX,4
LEA DI,VA1
A3: DIV BX
STACK SEGMENT
DW 32 DUP(?)
STACK ENDS
DATA SEGMENT
VA1 DB 04H,05H,06H,04H,00H ;VA1,VA2为我方便仿真而设,课程设计中应把这两个数据段改为你设的数据段
VA2 DB 02H,03H,04H,00H
LEA DI,VA3
XOR BX,BX
MOV CX,4
A1: XOR AX,AX
MOV AL,[SI]
MOV DX,[DI]
MUL DX
ADD BX,AX
END START
MOV CX,4
A2: XOR AX,AX
MOV AL,[SI]
MOV DX,[DI]
MUL DX
ADD BX,AX
INC SI
INC DI
INC DI
VA3 DW 1,8,64,512
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE , DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,VA1 ;课设中,本句前加PUSH BX,然后前面的定义不要
INC SI
INC DI
INC DI
LOOP A1
MOV DX,BX
PUSH DX
LEA SI,VA2
LEA DI,VA3
XOR BX,BX
MOV [DI],DL
XOR DX,DX
INC DI
LOOP A3 ;规则同16进制除法一样,在后面加......语句,然后下面程序不要
MOV AH,4CH
INT 21H
பைடு நூலகம் CODE ENDS