16位二进制数转换为十进制数(BCD码)的可用算法
2017-2018-1通达复习提纲(1)
例: 异步通信一帧数据格式中, 按照发送的次序, 先传送___起__始__位___, 紧接着是数据___5_-_8__位, 数据位后依次为____校__验__位____, ___停__止___位____。
3. 为实现通信, 收发双方一帧 帧数据(或 数据帧)格式 和 通信速率 要保持一致。 4. RS232信号采用负逻辑。 “1”= 3V ~ 15V, “0”= 3V ~ 15V 5. 8250内部寄存器的功能。
MOV WORD PTR OLD1C+2, ES
RET
READ1C ENDP
;---------------------------------
WRITE1C PROC
;写入用户1CH型中断向量
PUSH DS
MOV AX, CODE
MOV DS, AX
MOV DX, OFFSET SERVICE
MOV AX, 251CH
3. 字扩展法
仅扩展存储容量(单元数), 而位数不变。连接时将各芯片同名地址线、 数据线、读/写线并联, 而使用片选信号区分各个芯片。
例如:用16K×8位的芯片组成64K×8位的存储器需要4个芯片 寻址存储体需要 16根(216=64K)地址线,
其中片内(214=16K)14根, 片间选片地址线:2根
④ 设置中断允许命令字
查询方式, 则中断允许命令字=0, 禁止中断 中断方式, 使中断允许命令字相应位置1
⑤ 设置MODEM控制寄存器 中断方式:D3=1, 允许8250送出中断请求 查询方式:D3=0 内环方式:D4=1 正常通信:D4=0 使用联络线:D1、D0位置1
(2) 8250查询方式下接收和发送程序
4. 字长=8, 用补码形式完成下列十进制数运算。要求有计算过程, 写 出加数、被加数和结果的补码, 以及O标志和C标志的值, 并讨论结果 是否有溢出
嵌入式系统原理[8086]选择题
嵌入式系统原理[8086]选择题嵌入式系统原理[8086]选择题(2011田)1.把若干个模块连接起来成为可执行文件的系统程序称为()。
(a) 连接程序(b) 汇编程序(c) 编译程序(d) 目标程序2.一个字符的基本ASCII值占用()位二进制。
(a) 6 (b) 7(c) 8 (d) 93.ASCII中的32H表示的字符是()。
(a) “3”(b) “2”(c) “b”(d) “B”4.8位二进制补码整数的最小值是()。
(a) -126 (b) -127 (c) -128(d) -1295.16位二进制补码表示为十进制数的范围是()。
(a) -32768~32768 (b) -32768~32767(c) -32768~32767 (d) -32767~327676.计算机存储信息的基本单位是一个()位。
(a) 二进制(b) 八进制(c) 十进制(d) 十六进制7.若计算机字长16位,则无符号整数表示为十六进制数的范围是()。
(a) 8000H~0FFFFH (b) 0000H~8000H (c) 0000H~0FFFFH(d) 0001H~0FFFFH8.在计算机中一个字节由()位二进制数组成。
(a) 2 (b) 4 (c) 8(d) 169.将高级语言的程序翻译成机器语言代码程序的实用程序是()。
(a) 编译程序(b) 汇编程序(c) 解释程序(d) 目标程序10.计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。
目前,计算机机中普遍采用的是()。
(a) BCD码(b) 二进制码(c) ASCII(d) 十六进制码11.用指令的助记符、符号地址、标号和伪指令、宏指令以及规定的格式书写程序的语言称为()。
(a) 汇编语言(b) 高级语言(c) 机器语言(d) 低级语言12.十进制数-100的8位二进制数的补码为()。
(a) 11100100 (b) 01100100 (c) 10011100(d) 1100111013.下列是8位二进制数的补码,其中真值最大的是()。
汇编语言程序设计(第四版)【课后答案】
汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
微机原理第一章至第八章作业参考答案
1KB 512B
8KB
1KB=210 的偏移地址范围为: 00 0000 0000~11 1111 1111 即 000H~3FFH 512B=29 的偏移地址范围为: 0 0000 0000~1 1111 1111 即 000H~1FFH 8KB=213 的偏移地址范围为: 0 0000 0000 0000~1 1111 1111 1111 即 0000H~1FFFH
POP AX
PUSH CX
2.10 下列程序段中每一条指令执行完后,AX 中的十六进制内容是什么?
MOV AX,0
;0000H
DEC AX
;0000H-1=0FFFFH
ADD AX,7FFFH
;0FFFFH+7FFFH=7FFEH
ADD AX,2
;7FFEH+2=8000H
NOT AX
;NOT 8000H=7FFFH
目标:寄存器寻址
(5)TEST ES:[SI],DX
目标:寄存器间接寻址 源:寄存器寻址
(6)SBB SI,[BP]
目标:寄存器寻址
源:寄存器间接寻址
2.8 假定 DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据段中变
量名 VAL 的偏移地址值为 0050H,试指出下面源操作数字段的寻址方式是什么?其物理地址值是多少?
每条指令执行后 AX 的内容为:
0000H
0FFFFH 7FFEH
8000H
7FFFH
8000H
0000H
0BFDFH 0ABCDH 0CDABH 9B56H
36ADH
2.15 假定 DX=00B9H,CL=3,CF=1,确定下列各条指令单独执行后 DX 中的值。
二进制_八进制_十进制_bcd码_十六进制_相互转化_及计算机中的补码反码原码
n=8时,范围为-127~+127
1.2.1
(3)补码
带符号数的编码
0X1X2 … Xn-1 1X1X2 … Xn-1 +1 ( X≥0) ( X≤0)
[X]补=
0表示正,1表示负,负数的补码表示为它的反码在最后位加1。 在计算机里把负数变为补码,是为了把减法变成加补码来进行。 (-87)10=11010111 ——原码表示 (-87)10=10101000 ——反码表示 (-87)10=10101001 ——补码表示 n位补码的表示范围: -2n-1~ +(2n-1-1)
无符号数的表示范围:
8位二进制无符号数:0~255 16位二进制无符号数:0~65535(216-1) 32位二进制无符号数:0~232-1
1.2.2
数的表示形式
微机中所能表示的数值类型
(1)无符号二进制数 字节、字、双字 (2)带符号的二进制定点整数 整数、短整数、长整数
(3)带符号的二进制浮点数
例: 1. (10100111000001.0110)2
=(24701.3)8 =(29C1.6)16
2. (
2
2 A C. 7 B )16 =(0010 1010 1100 . 0111 1011)
1.2
计算机中数值数据的编码和表示
机器数与真值
实际运算中,数是有正负的,计算机中数也有正 负,通常用一个数的最高位表示符号,如果字长 为8位,分别为D7 ~~ D0,那么D7为符号位, 0表示 正数,1表示负数;D6 ~ D0为数值位。 如: 11010111B=-87 这样,在计算机中,连同符号一起数码化的数, 就称为机器数,如上例中的11010111;而使用 正负号加其绝对值的表示方法,称为该数的真值, 如上例中的-87和-1010111B。
单片机基础-进制转换
专业IC嵌入式教育机构 专业 嵌入式教育机构
Fountainhead point education
虚度毁灭前途、 虚度毁灭前途、拼搏改变命运
四. 机器数与真值之间的转换
1. 真值与机器数
1)X1=+127,X2=-127,求[X]原 、[X]补 X1=+127,X2=-127, [X]原 [X]补 X1]原=[X1]补 [X1]原=[X1]补=01111111= 7FH X2]原 [X2]原=11111111= FFH X2]补 [X2]补=10000001= 81H 2)X1=+255 X2==+255, [X]原 [X]补 2)X1=+255,X2=-255 ,求[X]原 、[X]补 X1]原=[X1]补 [X1]原=[X1]补=0000000011111111= 00FFH X2]原 [X2]原=1000000011111111= 80FFH [X2]补=1111111100000001= FF01H X2]补
专业IC嵌入式教育机构 专业 嵌入式教育机构
Fountainhead point education
虚度毁灭前途、 虚度毁灭前途、拼搏改变命运
2. 小数转换法
“乘基取整 乘基取整”:用转换进制的基数乘以小数部分,直至小数为 用转换进制的基数乘以小数部分, 乘基取整 用转换进制的基数乘以小数部分 或达到转换精度要求的位数。每乘一次取一次整数, 0或达到转换精度要求的位数。每乘一次取一次整数,从最高 位排到最低位。举例: 位排到最低位。举例:
二、十六进制数转换成十进制数
先展开,然后按照十进制运算法则求和。 先展开,然后按照十进制运算法则求和。 举例: 举例: 1011.1010B=1× +1× +1× +1× +1× 1011.1010B=1×23+1×21+1×20+1×2-1+1×2-3=11.625 =13× +15× +12× +8× DFC.8H =13×162+15×161+12×160+8×16-1=3580.5
微机原理及应用(陈继红、徐晨)课后习题答案
微机原理及应用(陈继红、徐晨)课后习题答案第三章8086/8088指令系统和寻址方式习题答案(部分)3.1总结计算机中十进制、二进制、八进制及十六进制数的书写形式。
123D、0AFH、77Q、1001110B分别表示什么计数制的数?答案:123D、0AFH、77Q、1001110B分别表示十进制、十六进制、八进制、二进制。
3.2字长为8位、16位二进制数的原码、补码表示的最大数和最小数分别是什么?答案:8位原码表示的最大数:(27-1)、8位补码表示的最大数:(27-1)、8位原码表示的最小数:-(27-1)、8位补码表示的最小数-27。
16最小数:-215。
3.3答案:7DH。
(2)255(3)7248H。
(4)509013E2H。
3.4答案:240D0F0H。
128D80H。
(3)11111111十进制数:255D;十六进制数:0FFH。
(4)01010101十进制数:85D;十六进制数:55H。
3.5把下列无符号十六进制数分别转换为十进制数和二进制数。
(1)FF(2)ABCD(3)123(4)FFFF答案:(1)FF十进制数:255D;二进制数;11111111B。
1010101111001101B。
(3)123十进制数:291D;二进制数;000100100011B。
(4)FFFF十进制数:65535D;二进制数;1111111111111111B。
3.6分别用8位二进制数和16位二进制数写出下列十进制数的原码和补码。
(1)16(2)-16(3)+0(4)-0(5)127(6)-128(7)121(8)-9 答案:(1)16800010000(2)-16800010000(3)+0800000000(4)-0800000000(5)127801111111(6)-128810000000(7)1218:01111001;16位二进制数原码:0000000001111001补码:0000000001111001。
微机原理课后习题解答
微机原理习题第一章绪论习题与答案1. 把下列二进制数转换成十进制数、十六进制数及BCD码形式。
(1)10110010B =(2)01011101.101B =解:(1)10110010B = 178D = B2H = (0001 0111 1000)BCD (2)01011101.101B = 93.625D = 5D.AH= (1001 0011.0110 0010 0101)BCD2. 把下列十进制数转换成二进制数。
(1)100D =(2)1000D =(3)67.21D =解:(1) 100D = 01100100B(2) 1000D = 1111101000B(3)67.21D = 1000011.0011B3. 把下列十六进制数转换成十进制数、二进制数。
(1) 2B5H =(2) 4CD.A5H =解:(1)2B5H = 693D = 0010 1011 0101B(2)4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B4. 计算下列各式。
(1)A7H+B8H =(2)E4H-A6H =解:(1)A7H+B8H = 15FH(2)E4H-A6H = 3EH5. 写出下列十进制数的原码、反码和补码。
(1)+89(2)-37解:(1)[+89 ] 原码、反码和补码为: 01011001B(2)[-37] 原码= 10100101 B[-37] 反码= 11011010 B[-37] 补码= 11011011 B6.求下列用二进制补码表示的十进制数(1)(01001101)补=(2)(10110101)补=解:(1)(01001101)补= 77D(2)(10110101)补= -75D7.请用8位二进制数写出下列字符带奇校验的ASCII码。
(1)C:1000011 (2)O:1001111(3)M:1001101 (4)P:1010000解:(1)C:0 1000011 (2)O:0 1001111(3)M:1 1001101 (4)P:1 10100008.请用8位二进制数写出下列字符带偶校验的ASCII码。
汇编语言程序设计(第四版)第4章【课后答案】【精选】
汇编语言程序设计 第四版【课后习题答案】--囮裑為檤第4章 基本汇编语言程序设计〔习题4.1〕例题4.2如果要求算术右移8位,如何修改程序。
〔解答〕思路: 首先由最高位字节向次低位字节传送……次低位字节向最低位字节传送(共7次);再判最高位字节符号位,如为0,送00h 到最高位字节;如为1,送ffh 到最高位字节。
传送可参考例题4.2,不过应从第一号字节送第零号字节,……最高位字节向次低位字节传送;也可以用循环来完成: .model small .stack 256 .dataqvar dq 1234567887654321h .code .startup mov cx,7 mov si,1again: mov al, byte ptr qvar[si] mov byte ptr qvar[si-1],al inc siloop again test al,80h jz ezzmov bl,0ffh jmp done ezz: mov bl,0done: mov byte ptr qvar[7],bl .exit 0 end〔习题4.2〕例题4.2如果要求算术左移7位,如何用移位指令实现。
〔解答〕思路:可设计外循环体为8个字节左移一次,方法是:最低位字节算术左移一次, 次低位字节至最高位字节依次带 CF 位循环左移一次(内循环共8次),外循环体控制执行7次即可。
.model small .stack 256 .dataqvar dq 1234567887654321h4 11 201628.code.startupmov dx, 7 ;外循环次数mov ax, byte ptr qvar[0] ;最低位字节送axlpp: shl ax, 1 ;最低位字节左移一次,其d7移入CF 位 mov si, 1mov cx, 7 ;内循环次数again: rcl byte ptr qvar[si], 1 ;高位字节依次左移 P50 inc siloop again dec dx jnz lpp .exit 0 .end〔习题4.3〕将AX 寄存器中的16位数连续4位分成一组,共4组,然后把这4组数分别放在AL 、BL 、CL 和DL 寄存器中。
微机原理与接口技术课后习题有答案
第一章解:五代,详细见书解:微型计算机:以大规模、超大规模集成电路为主要部件,以集成了计算机主要部件——控制器和运算器的微处理器为核心,所构造出的计算机系统 ;PC机:PCPersonal Computer机就是面向个人单独使用的一类微机 ;单片机:用于控制的微处理器芯片,内部除CPU外还集成了计算机的其他一些主要部件,如:ROM、RAM、定时器、并行接口、串行接口,有的芯片还集成了A/D、D/A转换电路等;数字信号处理器DSP:主要面向大流量数字信号的实时处理,在宿主系统中充当数据处理中心,在网络通信、多媒体应用等领域正得到越来越多的应用解:微机主要有存储器、I/O设备和I/O接口、CPU、系统总线、操作系统和应用软件组成,各部分功能如下:CPU:统一协调和控制系统中的各个部件系统总线:传送信息存储器:存放程序和数据I/O设备:实现微机的输入输出功能I/O接口:I/O设备与CPU的桥梁操作系统:管理系统所有的软硬件资源解:系统总线:传递信息的一组公用导线,CPU通过它们与存储器和I/O设备进行信息交换 ;好处:组态灵活、扩展方便三组信号线:数据总线、地址总线和控制总线 ;其使用特点是:在某一时刻,只能由一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号;解:1用于数值计算、数据处理及信息管理方向;采用通用微机,要求有较快的工作速度、较高的运算精度、较大的内存容量和较完备的输入输出设备,为用户提供方便友好的操作界面和简便快捷的维护、扩充手段;2用于过程控制及嵌人应用方向;采用控制类微机,要求能抵抗各种干扰、适应现场的恶劣环境、确保长时间稳定地工作,要求其实时性要好、强调其体积要小、便携式应用强调其省电;解:解:I/O通道:位于CPU和设备控制器之间,其目的是承担一些原来由CPU处理的I/O任务,从而把CPU 从繁杂的I/O任务中解脱出来;由10根信号线组成A9-A0;解:BIOS:基本输入输出系统;主要功能:用来驱动和管理诸如键盘、显示器、打印机、磁盘、时钟、串行通信接口等基本的输入输出设备解:基本RAM区:640KB保留RAM区:128KB扩展ROM区:128KB基本ROM区:128KB解:1、数—用来直接表征量的大小,包括:定点数、浮点数;2、码—用来指代某个事物或事物的某种状态属性,包括:二进制、八进制、十进制、十六进制;区别:使用场合不同,详见P16.解:123解:原码反码补码+37 00100101/25H 00100101/25H 00100101/25H解:解:无符号数:70D补码有符号数:70DBCD码:46DASCII:F解:1、相加后若出现和大于9,则将和减去10后再向高位进12、若出现组间进位,则将低位加6解:详见课本16页;解:C3 40 20 00D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H解:国标码:36 50H机内码:B6 B0H第3章解:1完整的汇编语言源程序由段组成2一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列3需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点4所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内5通常,程序还需要一个堆栈段开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编解:段定位、段组合和段类型;解:stack segment stackdb 10240stack endsdata segmentstring db 'Hello,Assembly',0dH,0aH,‘$’data endscode segment 'code'assume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start解:1. EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序2. COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生成COM结构的可执行程序MASM 需要采用TINY模式解:符号定义伪指令有“等价EQU”和“等号=”:符号名 EQU 数值表达式符号名 EQU <字符串>符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值;例如:X= 7 ;等效于:X equ 7X= X+5 ;“X EQU X+5”是错误的解:1 al=67h2 ax=133h,dx=4h3 ax=0230h4 al=41h4 ax=7654h解:my1b db 'Personal Computer'my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dupmy6c = 100my7c = <'Personal Computer'>解:利用定位伪指令控制,如org,even,align解:包括逻辑地址和类型两种属性;解:;数据段org 100hvarw dw 1234h , 5678hvarb db 3 , 4buff dd 10 dupmess db 'Hello';代码段mov ax , offset varb + offset messmov ax , type buff + type mess + type vard mov ax , sizeof varw+ sizeof buff+ sizeof messmov ax , lengthof varw+ lengthof vard解:1 1000超过一个字节所能表达的最大整数2SI应为偶数3两个内存单元不能直接运算4应改为al+15条件转移指令后面应接标号,而不是变量解:mov ah,1 ;只允许输入小写字母int 21hsub al,20h ;转换为大写字母mov dl,almov ah,2int 21h ;显示解:mov bx,offset LEDtablemov al,lednumxlat解:mov ax, bufXcmp ax, bufYjae donemov ax, bufYdone: mov bufZ, ax解:.model small.stack.databufX dw -7signX db.code.startupcmp bufX,0 ;test bufX,80hjl next ;jnz nextmov signX,0jmp donenext: mov signX,-1done: .exit 0end解:mov dl,’2’mov ax,bufXcmp ax,bufYje next1dec dlnext1: cmp ax,bufZje next2dec dlnext2: mov ah,2int 21h解:;代码段mov al,numbermov bx,0 ;BX←记录为1的位数restart: cmp al,0 ;AL=0结束jz doneagain: shr al,1 ;最低位右移进入CFjc next ;为1,转移inc bx ;不为1,继续jmp againnext: push axpush bxshl bx,1 ;位数乘以2偏移地址要用2个字节单元jmp addrsbx ;间接转移:IP←table+BX;以下是各个处理程序段fun0: mov dl,'0'jmp dispfun1: mov dl,'1'jmp dispfun2: mov dl,'2'jmp dispfun3: mov dl,'3'jmp dispfun4: mov dl,'4'jmp dispfun5: mov dl,'5'jmp dispfun6: mov dl,'6'jmp dispfun7: mov dl,'7'jmp disp;disp: mov ah,2 ;显示一个字符int 21hpop bxpop axjmp restartdone: …编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中不考虑溢出和进位;;.model small.stack.datab_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数sum db ;预留结果单元.code.startupxor si, si ;位移量清零xor al, al ;取第一个数mov cx, num ;累加次数again: add al, b_datasi ;累加inc si ;指向下一个数loop again ;如未完,继续累加mov sum, al ;完了,存结果.exit 0end求主存0040h:0开始的一个64KB物理段中共有多少个空格;.model small.codestart: mov ax,0040h ;送段地址mov ds, axmov si, 0 ;偏移地址mov cx, si ;计数循环次数xor ax, ax ;空格计数器清零again: cmp byte ptr si, 20h ;与空格的ASCII码比较jne next ;不是空格,转inc ax ;是空格,空格数加1next: inc si ;修改地址指针loop again ;cx=cx-1,如cx=0 退出循环.exit 0end start编写计算100个16位正整数之和的程序;如果和不超过16位字的范围65535,则保存其和到wordsum,如超过则显示‘overflow’;答:;数据段count equ 100parray dw count dup ;假设有100个数据wordsum dw 0msg db ‘overflow’,’$’;代码段mov cx,countmov ax,0mov bx,offset parrayagain: add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h ;显示溢出信息jmp done ;然后,跳出循环体next: add bx,2loop againmov wordsum,axdone: …编程把—个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数;转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以l00、10和l,得到“百位”、“十位”和“个位”; ;.model small.stack 256.dataarray dw ;源字数据dbcd db 5 dup ;五位bcd结果,高对高低对低.code.startupmov dx, array ;取源数据余数mov bx, 10000 ;除数mov cx, 10 ;除数系数mov si, 4 ;目的数据高位位移量again: mov ax, dx ;中存放被除数mov dx, 0div bx ;除于bx,商ax,余数dxmov dbcdsi, al ;商<10,存结果push dx ;暂存余数mov ax, bx ;除数除于10mov dx,0div cx ;除于cx,商ax、余数0存在dxmov bx, ax ;bx是除数pop dxdec si ;目的数据位移量减1jnz againmov dbcd, dl ;存个位数 < 10.exit 0end解:1汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下:过程名PROC NEAR|FAR……;过程体过程名ENDP2保护用到的寄存器内容,以便子程序返回时进行相应的恢复;3改错:crazy procpish bxpush cxxor ax,axxor dx,dxagain:add a,bxadc dx,0inc bxinc bxloop againpop cxpop bx解不需调用HTOASC子程序:again: mov ah,1int 21hcmp al,1bh ;ESC的ASCII码是1bhje donemov dl,almov ah,2int 21h ;是大写字母则转换为小写字母jmp againdone: …解答:asctob procpush cxand dh,0fh ;先转换十位数shl dh,1 ;十位数乘以10采用移位指令mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh ;转换个位数add dh,dl ;十位数加个位数mov al,dh ;设置出口参数pop cxretasctob endp解:DIPASC proc ;入口参数:AL=要显示的一个16进制数push cxpush dxpush axmov cl,4 ;转换高位shr al,clcall HTOASCmov dl,al ;显示mov ah,2int 21hpop ax ;转换低位call HTOASCmov dl,al ;显示mov ah,2int 21hmov dl,’H’;显示一个字母“H”mov ah,2int 21hpop dxpop cxretDIPASC endpHTOASC proc ;将AL低4位表达的一位16进制数转换为ASCII码and al,0fhcmp al,9jbe htoasc1add al,37h ;是0AH~0FH,加37H转换为ASCII码ret ;子程序返回htoasc1: add al,30h ;是0~9,加30H转换为ASCII码ret ;子程序返回HTOASC endp解:lucase procpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0: cmp byte ptr bx,0je donecmp byte ptr bx,’A’jb next0cmp byte ptr bx,’Z’ja next0add byte ptr bx,20hnext0: inc bxjmp case0case1: cmp byte ptr bx,0je donecmp byte ptr bx,’a’jb next1cmp byte ptr bx,’z’ja next1sub byte ptr bx,20hnext1: inc bxjmp case1case2: cmp byte ptr bx,0je donecmp byte ptr bx,’A’jb next2cmp byte ptr bx,’Z’ja next20add byte ptr bx,20hjmp next2next20: cmp byte ptr bx,’a’jb next2cmp byte ptr bx,’z’ja next2sub byte ptr bx,20hnext2: inc bxjmp case2done: pop bxretlucase endp解:1用寄存器传递参数:最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了由于通用寄存器个数有限,这种方法对少量数据可以直接传递数值,而对大量数据只能传递地址采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致2用共享变量传递参数子程序和主程序使用同一个变量名存取数据就是利用共享变量全局变量进行参数传递如果变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明如果主程序还要利用原来的变量值,则需要保护和恢复利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间传递数据3用堆栈传递参数参数传递还可以通过堆栈这个临时存储区;主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法解:方法:主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得它们注意:压栈与弹栈必须要一一对应;解:方法1:neg32 proc ;入口参数:=32位有符号数neg ax ;实现0-功能neg dxsbb dx,0 ;这条指令也可以用dec dx代替retneg32 endp ;出口参数:=32位有符号数的补码方法2:neg32 proc ;入口参数:=32位有符号数not ax ;实现求反加1not dxadd ax,1adc dx,0retneg32 endp ;出口参数:=32位有符号数的补码解:;数据段array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h ;数组count equ $-array ;数组元素个数result db ;校验和;代码段mov bx,offset array ;BX←数组的偏移地址mov cx,count ;CX←数组的元素个数call checksum ;调用求和过程mov result,al ;处理出口参数mov ax,4c00hint 21h;计算字节校验和的通用过程;入口参数:DS:BX=数组的段地址:偏移地址,CX=元素个数;出口参数:AL=校验和;说明:除AX/BX/CX外,不影响其他寄存器checksum procxor al,al ;累加器清0sum: add al,bx ;求和inc bx ;指向下一个字节loop sumretchecksum endpend解:⑴.model small.stack.datawdata dw 34abh.code.startupmov ax,wdatacall dispa.exit 0;dispa procpush cxpush dxmov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxretdispa endp;dldisp procpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend⑵.model small.stack.datawdata dw 34abhwordtemp dw.code.startupmov ax,wdatamov wordtemp,axcall dispa.exit 0;dispa procpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1shr dl,clcall dldispmov dl,byte ptr wordtemp+1and dl,0fhcall dldispmov dl,byte ptr wordtempshr dl,clcall dldispmov dl,byte ptr wordtempand dl,0fhcall dldisppop dxpop cxretdispa endp;dldisp procpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend⑶.model small.stack.datawdata dw 34abh.code.startuppush wdatacall dispapop ax ;add sp,2.exit 0;dispa procpush bpmov bp,sppush axpush cxpush dxmov ax,bp+4mov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxpop axpop bpretdispa endp;dldisp procpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend解:如果利用共享变量传递函数,且变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTERN 声明;解:1宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下:宏名MACRO 形参表……;宏定义体ENDM宏定义之后就可以使用它,即宏调用:宏名实参表2宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔3宏展开:在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代解:宏调用的参数通过形参、实参结合实现传递,简捷直观、灵活多变;宏汇编的一大特色是它的参数;宏定义时既可以无参数,也可以有一个或多个参数;宏调用时实参的形式也非常灵活,可以是常数、变量、存储单元、指令操作码或它们的一部分,也可以是表达式;只要宏展开后符合汇编语言的语法规则即可;解:宏:仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变子程序:还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数选择:宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法;通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序编写一个宏指令move doprnd,soprnd,它实现任意寻址方式的字量源操作数soprnd送到目的操作数doprnd,包括存储单元到存储单元的传送功能;答:move macro doprnd,soprndmov ax,soprndmov doprnd,axendm定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test;注意需要利用3个形式参数,并给出一个宏调用以及对应宏展开的例子;答:logical macro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“and ax,bx”指令,可以利用该宏定义,写出宏指令如下:logical and,ax,bx解:utol macrolocal nextcmp al,’A’;小于“A”不转换jb nextcmp al,’Z’;大于“A”不转换ja nextadd al,20h ;是大写字母则转换为小写字母next:endm定义一个宏movestr strn,dstr,sstr,它将strn个字符从一个字符区sstr传送到另一个字符区dstr解:假设它们都在数据段movestr macro strn,dstr,sstrmov cx,dsmov es,cxmov cx,strnmov di,offset dstrmov si,offset sstrcldrep movsb ;;重复传送ES:DI←DS:SIendm第五章解:主存的作用:保存正在使用的、处于活动状态的程序和数据;辅存的作用:长期保存程序文件和数据文件,在需要时将这些文件调入RAM内存并激活使用;cache的作用:提高对存储器的访问速度;虚拟存储:由容量较小的主存和容量较大的辅存构成,其目标是扩大程序员眼中的主存容量;区别:通过存储器访问指令用户可对主存进行随机访问;用户利用操作系统提供的用户命令和功能调用对辅存进行访问;在半导体存储器中,RAM指的是随机存取存储器 ,他可读可写,但断电后信息一般会丢失;而ROM指的是只读存储器 ,正常工作时只能从中读取信息,但断电后信息不会丢失 ;以EPROM芯片2764为例,其存储容量为8K×8位,共有 8 条数据线和 13 条地址线;用它组成64KB的ROM存储区共需 8 片2764芯片; 解:双译码方式使得地址译码器的输出线的数目大为减少,使得芯片设计得时候复杂度就低了;地址线A9~A4根数据线I/O4~I/O1片选CS读写WE解:假想的RAM有12根地址线、4根数据线片选端CS或CE:有效时,可以对该芯片进行读写操作,通过对系统高位地址线的译码来选中各个存储芯片输出OE:控制读操作;有效时,芯片内数据输出,该控制端对应系统的读控制线MEMRMRDC写WE:控制写操作;有效时,数据进入芯片中,该控制端对应系统的写控制线MEMWMWTC解:位片结构:每个存储单元具有一个唯一的地址,可存储1位;4116字片结构:每个存储单元具有一个唯一的地址,可存储多位;2114解:组成单元速度集成度应用SRAM 触发器快低小容量系统DRAM 极间电容慢高大容量系统NVRAM 带微型电池慢低小容量非易失掩膜ROM:信息制作在芯片中,不可更改PROM:允许一次编程,此后不可更改EPROM:用紫外光擦除,擦除后可编程;并允许用户多次擦除和编程EEPROME2PROM:采用加电方法在线进行擦除和编程,也可多次擦写Flash Memory闪存:能够快速擦写的EEPROM,但只能按块Block擦除解:位扩充——存储器芯片数据位数小于主机数据线数时,利用多个存储器芯片在数据“位”方向的扩充;地址扩充字扩充——当一个存储器芯片不能满足系统存储容量时,利用多个存储器芯片在“地址”方向的扩充组成32KB存储空间,用SRAM 21141K×4需要64个芯片;组成32KB存储空间,用DRAM 411616K×1需要16个芯片;它们都需要进行位扩充和地址扩充解:片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式采用全译码方式可以避免地址重复采用部分或线选译码可以节省译码硬件解:24=16解:解:解:解:解:动态随机存取存储器 DRAM 的存储单元电路动态存储单元是由 MOS 管的栅极电容 C 和门控管组成的;数据以电荷的形式存储在栅极电容上,电容上的电压高表示存储数据 1 ;电容没有储存电荷,电压为 0 ,表明存储数据 0 ;因存在漏电,使电容存储的信息不能长久保持,为防止信息丢失,就必须定时地给电容补充电荷,这种操作称为“ 刷新” 由于要不断地刷新,所以称为动态存储;方法:采用“仅行地址有效”方法刷新;刷新周期:15μs刷新次数:128解:4 256KB A19-A16 4解:访问的局部性原理:在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内;指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次;因此,对这些地址的访问就自然地具有时间上集中分布的倾向;数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中;这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性;cache的作用:提高对存储器的访问速度;虚拟存储:其目标是扩大程序员眼中的主存容量;第七章解:总线:指可以由多个信息处理单元所共享的信息通道;使用特点:⑴在某一时刻,只能由一个主设备控制总线,其他主设备此时可作为从设备出现⑵在某一时刻,只能有一个设备向总线上发送数据,但可以有多个设备从总线上接收数据在各种微机总线中,根据总线连接对象的不同可将它们分为以下几类,它们是:片内总线、芯片总线、板级总线、设备总线和互连总线_;例如,ISA总线属于板级总线,USB总线属于设备总线,I2C总线属于芯片总线;总线中除电源和地线外的信号线,也可按传输信息的不同分为以下3类,即:数据总线、地址总线、控制总线 ;解:分时复用就是一个引脚在不同的时刻具有两个甚至多个作用总线复用的目的是为了减少对外引脚个数在访问存储器或外设的总线操作周期中,这些引脚在第一个时钟周期输出存储器或I/O端口的低8位地址A7 ~ A0,其他时间用于传送8位数据D7 ~ D0 解:并行总线:多维数据通过多根信号线同时进行传递;并行同步传输、并行异步传输见P174;解:见P174.解:总线的性能指标包括:总线宽度、标准传输、时钟同步/异步、总线复用、信号线数、总线控制方式总线宽度:它是指数据总线的根数, 用bit位表示,如8位、16位、32位、64位;解:D0~D7:8位双向数据总线A0~A19:20位输出地址总线ALE:地址锁存允许,每个CPU 总线周期有效IOR:I/O读,输出IOW:I/O写,输出IO CH RDY:I/O通道准备好,输入第九章解:软件延时、不可编程的硬件定时、可编程的硬件定时解:CLK时钟输入信号——在计数过程中,此引脚上每输入一个时钟信号下降沿,计数器的计数值减1GATE门控输入信号——控制计数器工作,可分成电平控制和上升沿控制两种类型OUT计数器输出信号——当一次计数过程结束计数值减为0,OUT引脚上将产生一个输出信号解:8253每个通道有 6 种工作方式可供选择;若设定某通道为方式0后,其输出引脚为低电平;当写入计数初值并进入减1计数器后通道开始计数, CLK 信号端每来一个脉冲减1计数器就减1;当计数器减为0 ,则输出引脚输出高电平,表示计数结束;8253的CLK0接的时钟,欲使OUT0产生频率为300KHz的方波信号,则8253的计数值应为 5=÷300KHz ,应选用的工作方式是 3解:1 mov al,50hmov dx,207hout dx,almov al,128 ;80hmov dx,205hout dx,al2 mov al,33hmov dx,207hout dx,almov ax,3000h ;不是3000mov dx,204hout dx,almov al,ahout dx,al3 mov al,0b4hmov dx,207hout dx,almov al,02f0hmov dx,206hout dx,almov al,ahout dx,al解:mov al,33hout 0fbh,al ;写入计数器0地址:0fbhmov al,80h ;out 0f8h,al ;写入低字节计数初值mov al,50hout 0f8h,al ;写入高字节计数初值作用:计数器0的计数初值为5080h解计数器0——每隔55ms产生一个IRQ0中断请求计数器1——每隔15μs产生一个DRAM刷新请求计数器2——控制扬声器音调解101个下降沿,还可以采用方式4GATE0接外部启动计数器的控制信号,可以选用方式1或方式5 mov dx,203hmov al,12h ;方式5为1ahout dx,almov dx,200hmov al,64hout dx,al解:计数器0的计数值:5M/1K=5000=1388H方式控制字:00100101=25H、2DH、35H、3DH十进制计数00100100=24H、2CH、34H、3CH二进制计数计数器1的计数值:1000方式控制字:01101001=69H、79H十进制计数 01101000=68H、78H二进制计数MOV DX,0FFF3HMOV AL,25H ;通道0,只写高字节,方式2,十进制OUT DX,ALMOV DX, 0FFF0HMOV AL,50H ;计数初值5000OUT DX,ALMOV DX,0FFF3HMOV AL,69H ;通道1,方式4OUT DX,ALMOV DX, 0FFF1HMOV AL,10H ;计数初值1000OUT DX,AL解:stack segment stackdw 1024 dupstack endsdata segmentfreq dw 8,,,,,,,,data endscode segment 'code'assume cs:code, ds:data,ss:stack start: mov ax,datamov ds,axagain:mov ah,01hin 21hcmp al,1BHjz nextcmp al,31Hjb next1cmp al,38Hja next1and al,0fhmov ah,00hmov si,axmov bx,offset freqmov ax,BX+SIcall speakercall speakonjmp againnext1: call speakoffjmp againnext: mov ax,4c00hint 21hspeaker procpush axmov al,0b6hout 43h,alpop axout 42h,almov al,ahout 42h,alretspeaker endp speakon procpush axin al,61hor al,03hout 61h,alpop axretspeakon endp speakoff procpush axin al,61hand al,0fchout 61h,alpop axretspeakoff endpcode endsend starts 解:1 f 1162f。
计算机基础二进制十进制
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
表示符号数
《微型计算机原理与接口技术》课后习题答案
1. 什么是冯·诺依曼机?答:冯·诺依曼于1945 年提出了存储程序的概念和二进制原理,利用这种概念和原理设计的电子计算机系统统称为冯·诺依曼机。
它包括运算器、控制器、存储器、输入设备和输出设备五个组成部分。
早期的冯·诺依曼机结构上以运算器和控制器为中心,随着计算机体系结构的发展,现在已演化为以存储器为中心的结构。
2. 微处理器,微型计算机,微型计算机系统有什么联系与区别?答:微处理器是微型计算机系统的核心,也称为CPU(中央处理器)。
主要完成:①从存储器中取指令,指令译码;②简单的算术逻辑运算;③在处理器和存储器或者I/O 之间传送数据;④程序流向控制等。
微型计算机由微处理器、存储器、输入/输出接口电路和系统总线组成。
以微型计算机为主体,配上外部输入/输出设备及系统软件就构成了微型计算机系统。
三者关系如下图:3. 微处理器有哪些主要部件组成?其功能是什么?答:微处理器是一个中央处理器,由算术逻辑部件ALU、累加器和寄存器组、指令指针寄存器IP、段寄存器、标志寄存器、时序和控制逻辑部件、内部总线等组成。
算术逻辑部件ALU 主要完成算术运算及逻辑运算。
累加器和寄存器组包括数据寄存器和变址及指针寄存器,用来存放参加运算的数中间结果或地址。
指令指针寄存器IP 存放要执行的下一条指令的偏移地址,顺序执行指令时,每取一条指令增加相应计数。
段寄存器存放存储单元的段地址,与偏移地址组成20 位物理地址用来对存储器寻址。
标志寄存器flags 存放算术与逻辑运算结果的状态。
时序和控制逻辑部件负责对整机的控制:包括从存储器中取指令,对指令进行译码和分析,发出相应的控制信号和时序,将控制信号和时序送到微型计算机的相应部件,使CPU内部及外部协调工作。
内部总线用于微处理器内部各部件之间进行数据传输的通道。
4. 画一个计算机系统的方框图,简述各部分主要功能。
答:计算机系统由硬件(Hardware)和软件(Software)两大部分组成。
bcd码的转换
bcd码的转换bcd码也叫8421码就是将⼗进制的数以8421的形式展开成⼆进制,⼤家知道⼗进制是0~9⼗个数组成,着⼗个数每个数都有⾃⼰的8421码:0=00001=00012=00103=00114=01005=01016=01107=01118=10009=1001举个例⼦:321的8421码就是3 2 10011 0010 0001⼆进制编码的⼗进制数,简称BCD码(Binarycoded Decimal). 这种⽅法是⽤4位⼆进制码的组合代表⼗进制数的0,1,2,3,4,5,6 ,7,8,9 ⼗个数符。
4位⼆进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表⼗进制中的0,1,2,3,4,5,6,7,8,9 这⼗个数符。
最常⽤的BCD码称为8421BCD 码,8.4.2.1 分别是4位⼆进数的位取值。
右图为⼗进制数和8421BCD编码的对应关系表:1、BCD码与⼗进制数的转换BCD码与⼗进制数的转换.关系直观,相互转换也很简单,将⼗进制数75.4转换为BCD码如:75.4=(0111 (0101.0100)BCD 若将BCD码1000 0101.0101转换为⼗进制数如: (1000 0101.0101)BCD=85.5注意:同⼀个8位⼆进制代码表⽰的数,当认为它表⽰的是⼆进制数和认为它表⽰的是⼆进制编码的⼗进制数时,数值是不相同的。
例如:00011000,当把它视为⼆进制数时,其值为24;但作为2位BCD码时,其值为18。
⼜例如00011100,如将其视为⼆进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个⾮法编码.2、BCD码的格式计算机中的BCD码,经常使⽤的有两种格式,即分离BCD码,组合BCD 码。
所谓分离BCD码,即⽤⼀个字节的低四位编码表⽰⼗进制数的⼀位,例如数82的存放格式为:_ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表⽰⽆关值。
微机原理与接口技术完整版答案(第二版)
课后答案:2.1 将下列十进制数分别转换为二进制数、八进制数、十六进制数。
128D=10000000B=200O=80H1024D=10000000000B=2000O=400H0.47D=0.01111000B=0.36O=0.78H625D=1001110001B=1161O=271H67.544D=1000011.1000B=103.4264O=43.8BH2.2 将下列二进制数转换成十进制数。
10110.001B=22.125D11000.0101B =24.3125D2.3 将下列二进制数分别转换为八进制数、十六进制数。
1100010B=142O=62H101110.1001B=56.44O=2E.9H0.1011101B=0.564O=0.BAH2.4 写出下列用补码表示的二进制数的真值。
01110011 —→ 01110011 —→ +11500011101 —→ 00011101 —→ +2910010101 —→ 11101011 —→-10711111110 —→ 10000010 —→-210000001 —→ 11111111 —→-1272.6 写出下列十进制数的BCD码表示形式。
456=(0100 0101 0110)BCD789=(0111 1000 1001)BCD123=(0001 0010 0011)BCD3.1 8086CPU由几部分组成?它们的主要功能是什么?答:从功能上讲,8086分为两部分,即总线接口部件BIU(Bus Interface Unit)和执行部件EU(Execution Unit)。
BIU是CPU与外部存储器及I/O的接口,负责与存储器和I/0系统进行数据交换。
指令执行部件EU完成指令译码和执行指令的工作。
3.2 8086有多少根地址线?可直接寻址多大容量的内存空间?答:8086CPU有16根数据线和20根地址线,直接寻址空间为220,即为1M字节。
(完整版)BCD码指令
BCD码指令 AAA DAA AAS DAS AAM AAD(四) 十进制数(BCD码)运算指令以上我们介绍的是二进制数的算术运算指令,二进制数在计算机上进行运算是非常简单的。
但是,通常人们习惯于用十进制数。
在计算机中十进制数是用BCD码来表示的,BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。
用BCD码进行加、减、乘、除运算,通常采用两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,然后再用专门的指令对结果进行修正(调整),使之转变为正确的BCD码表示的结果。
8086/8088指令系统所采用的是后一种方法。
在进行十进制数算术运算时,应分两步进行:①先按二进制数运算规则进行运算,得到中间结果。
②再用十进制调整指令对中间结果进行修正,得到正确的结果。
下面通过几个例子说明BCD码运算为什么要调整以及怎样调整。
结果正确,这时调整指令不需要做什么。
结果不正确,因为在进行二进制加法运算时,低4位向高4位有一个进位,这个进位是按十六进制进行的,即低4位逢十六才进一,而十进制数应是逢十进一。
因此,比正确结果少6,这时,调整指令应在低4位上加6。
即:加法运算后,低4位若向高4位有进位(即AF=1)时,调整指令应做加06H处理。
加法运算后,低4位>9时,调整指令需做加06H处理;高4位>9时,调整指令需做加60H处理。
加法运算后,当CF=1(有进位产生)时,调整指令应做加60H处理。
前面我们已经详细地介绍了二进制数的算术运算指令,下面主要介绍十进制数(BCD码)的调整指令。
⒈十进制加法的调整指令根据BCD码的种类,对BCD码加法进行十进制调整的指令有两条AAA和DAA。
⑴非压缩型BCD码加法调整指令AAA (ASCII Adjust for Addition)指令格式:AAAAAA也称为加法的ASCII调整指令。
指令后面不写操作数,但实际上隐含累加器操作数AL和AH。
微机原理及接口技术习题解答与实验指导
微机原理及接口技术习题解答与实验指导(总244页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除第一部分学习指导与习题解答 (4)第1章计算机基础 (4)1.1 学习指导 (4)1.2 单项选择题 (4)1.3 判断题 (7)1.4填空题 (7)1.5 简答题 (9)第2章微处理器 (11)2.1 学习指导 (11)2.2单项选择题 (12)2.3判断题 (17)2.4填空题 (18)2.5 简答题 (20)第3章 80x86指令系统 (24)3.1学习指导 (24)3.2单项选择题 (25)3.3 判断题 (31)3.4 填空题 (33)3.5 简答题、 (36)3.6. 分析程序题 (43)3.7 编程题 (45)第四章 (48)4.3 判断题 (54)4.4 填空题 (56)4.5 简答题 (66)4.6 分析程序题 (78)4.7 编程题 (87)第5章半导体存储器及其接口技术 (120)5.1 学习指导 (120)5.2单项选择题 (120)5.3判断题 (123)5.4填空题 (124)5.5简答题 (125)5.6应用题 (128)第6章微型计算机接口技术 (137)6.1 学习指导 (137)6.2单项选择题 (138)6.3判断题 (141)6.4填空题 (142)6.4填空题 (144)6.5简答题 (144)第7章,简单接口电路设计 (152)7.1 学习指导 (152)7.2单项选择题 (153)7.3判断题 (153)7.5应用题 (154)第8章可编程接口技术 (159)8.1可编程计数器8253/8254 (159)8.1.1学习指导 (159)8.1.2单项选择题 (161)8.1.3判断题 (162)8.1.4填空题 (162)8. 1 . 5 简答题 (163)8.1.6 应用题 (163)8.2 并行通信接口8255A (166)8.2.1 学习指导 (166)8.2.2 单选题 (167)8.2.3 判断题 (168)8.2.4 填空题 (168)8.2.5应用题 (169)8.3串行通信接口8250/8251 (174)8.3.2 单项选择题 (176)8.3.3判断题 (176)8.4可编程中断控制器8259A (182)8.4.1 学习指导 (182)8.4.2单选题 (183)8.4.3 判断题 (185)8.4.4 填空题 (186)8.4.5 简答题 (187)8.4.6 应用题 (189)第9章自检试卷 (192)9.1 自检试题一 (192)自检试题二 (196)第一部分学习指导与习题解答第1章计算机基础1.1 学习指导本章主要内容包括:1.计算机的发展2.整机概念计算机由处理器、存储器、输入/输出接口及三总线(数据总线DB、地址总线AB、控制总线CB)组成,如图1-1所示。
微型计算机原理与应用试题库答案
微型计算机原理与应用试题库答案《微型计算机原理及应用》试题库及答案一、填空1.数制转换A)125D=(0111 1101 )B =(175 )O=(7D )H=(0001 0010 0101 )BCDB)10110110B=(182 )D =(266)O=(B6 )H=(0001 1000 0010)BCD2.下述机器数形式可表示的数值范围是(请用十进制形式写出):单字节无符号整数0~ 255 ;单字节有符号整数-127 ~127 。
(注:微型计算机的有符号整数机器码采用补码表示,单字节有符号整数的范围为-128~+127。
)3.完成下列各式补码式的运算,并根据计算结果设置标志位SF、ZF、CF、OF。
指出运算结果有效否。
A)00101101+10011100=11001001B SF=1 ZF=0 CF=0 OF=0B)11011101+10110011=10010000B SF=1 ZF=0 CF=1 OF=04.十六进制数2B.4H转换为二进制数是_0010 1011.0100B ,转换为十进制数是_43.25。
5.在浮点加法运算中,在尾数求和之前,一般需要操作,求和之后还需要进行和舍入等步骤。
6.三态门有三种输出状态:低电平、高电平、高阻态状态。
7.字符“A”的ASCII码为41H,因而字符“E”的ASCII码为45H ,前面加上偶校验位后代码为。
8.数在计算机中的二进制表示形式称为机器数。
9.在计算机中,无符号书最常用于表示。
10.正数的反码与原码相等。
11.在计算机中浮点数的表示形式有整数和小数两部分组成。
12.微处理器中对每个字所包含的二进制位数叫字节。
13.MISP是微处理的主要指标之一,它表示微处理器在1秒钟内可执行多少14.PC机主存储器状基本存储单元的长度是 .15.一台计算机所用的二进制代码的位数称为__字长_______,8位二进制数称为_8位机___。
16.微型计算机由微处理器、存储器和总线组成。
8086系统汇编语言压缩BCD码与二进制相互转换.
EXAMPLE:
START: MOV AX , DATA MOV DS , AX XOR AL , AL;AL;置零,用来存放累加结果并进行十进制调整 BINBCD:ADD AL , 1;二进制数多大就加几次1,保证AL与二进制数等值
DAA;对AL进行压缩BCD码调整
DEC BINDATA;每执行一次,二进制数BCDDATA减一计数 JNZ BINBCD;不等于就跳转到BINBCD RET START ENDS
为最佳选择。
2)16 位二进制数转换为压缩 BCD 码 由于16 位二进制数超出 DAA 指令范围,只能应用除十求余法和按权展
开法。其中除十求余法比较简单。
3)位二进制数转换为压缩 BCD 码 对于 32 位二进制数,由于超出 8086 系统汇编语言除法 16 位的最大长
度,因此只能使用按权展开法。使计算机能够正确识别 32 位二进制数
POP CX;CX出栈,仍当做计数器,执行完一次操作自动减一
LOOP BINTOBCD;CX不等于0就返回BINTOBCD继续执行 RET COOD ENDS END START
二进制转化为BCD码方法选取
1)小于 100D 的二进制数转换为压缩 BCD 码 四种方法都适用,但是 DAA 指令法逻辑最为简单,指令也最少,因此
4、按权展开法
按权展开法原理简单,是将任何数制转换为十进制表示方式的通用 方法,也可将压缩 BCD 码转换为二进制数的方法。但是在二进制 向压缩 BCD 码的转换中,要与 DAA 指令法配合操作。而且其涉 及大量移位和乘法操作,语句相对复杂。
4.22题:编写一个将16位二进制数转换成BC)
对于待转换二进制数,由于 BCD 转换后大小不变,因此可假设该 数本身就是以十进制在计算机中储存的,这样就将二进制数向 BCD 码的转换转化成十进制向 BCD 码的转换。于是,该数除十 后得到的余数即为压缩 BCD 码的个位,再对商求余,得到十位, 以此类推。求余的次数取决于转换后压缩 BCD码的位数。但是, 取出的余数为非压缩 BCD 码,仍需进行相应调整。而且,求商和 余数的操作要依靠二进中商和余数最长为 16 位,因此除十求余法 只适用于16位和 16 位以下二进制数向压缩 BCD 码的转换。
16位二进制数转换成BCD码
16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。
说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。
做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。
但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。
上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。
.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。
为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的1/4!.近来,在网上发现了一个链接:/news/Article/uc/uc8051//4751.html,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。
这篇文章提到的程序,一直也没有找到,也难辩真假。
这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。
比如说文中提到的:“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。
51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。
.下面说说做而论道的编程思路。
;-----------------------------------------------------------------------;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。
;那么可以写成:; n = [b15 ~ b0];把16位数分解成高8位、低8位来写,也是常见的形式:; n = [b15~b8] * 256 + [b7~b0];那么,写成下列形式,也就可以理解了:; n = [b15~b12] * 4096 + [b11~b0];式中高4位[b15~b12]取值范围为0~15,代表了4096的个数;;上式可以变形为:; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]};用x代表[b15~b12],有:; n = x * 4000 + {x * (100 - 4) + [b11~b0]};即:; n = 4*x (千位) + x (百位) + [b11~b0] - 4*x;写到这里,就可以看出一点BCD码变换的意思来了。
16位二进制数转换为十进制数(BCD码)的可用算法
分析将16位二进制数转换为十进制数(BCD码)的可用算法------*****算法一:加3移位法(移位指令)"二进制数调整BCD码的方法是将二进制码左移16次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"一、为什么左移16次原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移16次,把数据全部移进去。
但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于64H(即100)。
第二,由于新寄存器是十进制的,要随时调整。
二、检查半字节+3 是否大于7,是,则+3在51 系列里有十进制调节指令(半字节大于9,则加6,应该不难理解),PIC 里没有,只好采取变通的方法。
检查半字节+3 是否大于7,也就是检查半字节是否大于4。
因为,如果大于4(比如5、6),下一步左移就要溢出了,所以加3,等于左移后的加6,起到十进制调节的作用。
那为什么要绕个圈子去检测半字节+3 是否大于7 呢?这样程序编起来会简练一些。
假如有一个二进制数511,我把他转511的十进制数1 1111 1111 原数1 0000 0001 ;左移一次2 0000 0011 ; 左移二次3 0000 0111 ;左移三次,检查低四位+3>7?3.1 0000 1010 ;大于7,加3进行调整4 0001 0101 ;左移四次, 检查低四位+3>7?4.1 0001 1000 ;大于7,加3进行调整5 0011 0001 ;左移五次6 0110 0011 ;左移六次,检查高四位+3>7?6.1 1001 0011 ;大于7,加3进行调整7 1 0010 0111 ;左移七次,检查低四位+3>7?7.1 1 0010 1010 ;大于7,加3进行调整8 10 0101 0101 ;左移八次,检查高低四位+3>7?8.1 10 1000 1000 ;大于7,加3进行调整9 101 0001 0001 ;左移九次(得到BCD码511)•算法二:•除法指令•unsigned int ui;//(16位无符号二进制数)•unsigned char uc[5];//(BCD码表示的5位十进制数)•uc[4]=(ui/10000)%10;•uc[3]=(ui/1000)%10;•uc[2]=(ui/100)%10;•uc[1]=(ui/10)%10;•uc[0]=ui%10;•算法三:•减法+循环指令•如例4-22:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析将16位二进制数转换为十进制数(BCD码)的可用算法
------*****
算法一:
加3移位法(移位指令)
"二进制数调整BCD码的方法是将二进制码左移16次,每次移位后都检查低四
位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"
一、为什么左移16次
原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移16次,
把数据全部移进去。
但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数
据要小于64H(即100)。
第二,由于新寄存器是十进制的,要随时调整。
二、检查半字节+3 是否大于7,是,则+3
在51 系列里有十进制调节指令(半字节大于9,则加6,应该不难理解),PIC 里没有,只好采取变通的方法。
检查半字节+3 是否大于7,也就是检查半字节是否大于4。
因为,如果大于4(比如5、6),下一步左移就要溢出了,所以加3,等于左移后的加6,起到十进制调节的作用。
那为什么要绕个圈子去检测半字节+3 是否大于7 呢?这样程序编起来
会简练一些。
假如有一个二进制数511,我把他转511的十进制数
1 1111 1111 原数
1 0000 0001 ;左移一次
2 0000 0011 ; 左移二次
3 0000 0111 ;左移三次,检查低四位+3>7?
3.1 0000 1010 ;大于7,加3进行调整
4 0001 0101 ;左移四次, 检查低四位+3>7?
4.1 0001 1000 ;大于7,加3进行调整
5 0011 0001 ;左移五次
6 0110 0011 ;左移六次,检查高四位+3>7?
6.1 1001 0011 ;大于7,加3进行调整
7 1 0010 0111 ;左移七次,检查低四位+3>7?
7.1 1 0010 1010 ;大于7,加3进行调整
8 10 0101 0101 ;左移八次,检查高低四位+3>7?
8.1 10 1000 1000 ;大于7,加3进行调整
9 101 0001 0001 ;左移九次(得到BCD码511)
•算法二:
•除法指令
•unsigned int ui;//(16位无符号二进制数)•unsigned char uc[5];//(BCD码表示的5位十进制数)
•uc[4]=(ui/10000)%10;
•uc[3]=(ui/1000)%10;
•uc[2]=(ui/100)%10;
•uc[1]=(ui/10)%10;
•uc[0]=ui%10;
•算法三:
•减法+循环指令•如例4-22:。