微机原理课后例题程序
微机原理例题(复习)

例5:编一个程序段完成,将存放在DX、AX中的32位数左移4位。
C AX C DX MOV CL, 4 Again: SHL AX, 1 RCL DX, 1 DEC CL
JNZ Again
HLT
例6:编一个程序段完成,将数据段中起始 地址为Source的100个字节的数据传送到附 加段中Dest指向的单元中。
CODE
例12:写一个完整的汇编程序完成求1-100的累加和,结果存放在SUM中。
DATA SEGMENT SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START PROC FAR BEGIN: PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS ,AX MOV CX, 100 MOV AX, 0 AGAIN: ADD AX, CX LOOP AGAIN MOV SUM, AX RET START ENDP CODE ENDS END BEGIN
开始
Y
X= 0
N
X> 0Y
N
Y=0
Y=1
Y= -1
要求写一个完整的汇编程序完 成上述计算。
DATA
DATA CODE START:
ZERO: PLUS: HALT:
SEGMENT X DW ? Y DB ? ENDS SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AX, X OR AX, AX JZ ZERO JNS PLUS MOV BL, 0FFH JMP HALT MOV BL, 0 JMP HALT MOV BL, 1 MOV Y,BL MOV AH, 4CH INT 21H ENDS END START
16。32位微机原理第3章课后习题答案

>第3章3.1:汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序3.2 解:(1)完整的汇编语言源程序由段组成(2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列(3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点(4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内(5)通常,程序还需要一个堆栈段3.3 解:存储模式特点TINY COM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持)SMALL小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB COMPACT代码少、数据多的程序,只有一个代码段,但有多个数据段MEDIUM代码多、数据少的程序,可有多个代码段,只有一个数据段LARGE大应用程序,可有多个代码段和多个数据段(静态数据小于64KB)HUGE更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)FLAT32位应用程序,运行在32位80x86CPU和Windows 9x或NT环境3.4解:开始位置:用标号指明返回DOS:利用DOS功能调用的4CH子功能来实现汇编停止:执行到一条END伪指令时,停止汇编3.5解:段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序例题3.1:创建一个在屏幕上显示一段信息的程序……解:stack segment stackdb 1024(0)stack 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 start3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?解:(1). EXE程序程序可以有多个代码段和多个数据段,程序长度可以超过64KB通常生成EXE结构的可执行程序(2). COM程序只有一个逻辑段,程序长度不超过64KB需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)3.8举例说明等价“EUQ”伪指令和等号“=”伪指令的用途解:符号定义伪指令有“等价EQU”和“等号=”:符号名 EQU 数值表达式符号名 EQU <字符串>符号名=数值表达式EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。
《微机原理》第04章 习题

习题1 习题
1.编写 编写8086汇编语言程序 , 将寄存器 的高 位传 汇编语言程序, 的高8位传 编写 汇编语言程序 将寄存器AX的高 送到寄存器BL, 位传送到寄存器DL 送到寄存器 ,低8位传送到寄存器 位传送到寄存器
习题2 习题
2.将寄存器 的内容从低到高位的顺序分成 组 , 将寄存器DX的内容从低到高位的顺序分成 将寄存器 的内容从低到高位的顺序分成4组 并将各组数分别送到寄存器AL,BL,CL和 DL( 如 并将各组数分别送到寄存器 和 ( DX=6D82H,分成:06H、0DH、08H、02H)。 ,分成: 、 、 、 )
MOV AX,MEN MOV BX,AX SHR AX,1 JC PO_1 MOV MEMB,BX JMP DONE PO_1: MOV MEMA,BX : DONE:
习题4 习题
4.试统计 个数中偶数的个数,并将结果在屏幕显示 试统计9个数中偶数的个数 试统计 个数中偶数的个数,
SI BUFF 3BH 47H 8DH -75 0A4H 69H -2EH 0CCH 200 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H
逻辑左移
CF
0 1 XXX XXXX 0 XXX XXXX
SHL AL,1 ADC DL,0
ADC指令实现 指令实现DL+CF+0 指令实现 如果是负数, 为 , 个数记录加1 如果是负数,CF为1,则DL个数记录加 个数记录加
DATA SEGMENT BUFF DW 6700H,9E00H,-6A00H,0A0BH,6D00H NUM DB $-BUFF MEM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA , START:MOV AX,DATA MOV DS,AX MOV CX,NUM LEA BX,BUFF
微机原理例题

一、设某8086系统中包含芯片8253、8259A及8255A各一片,其系统结构示意图1如图所示。
其中,8255A的PA0、PA1口分别连接开关K1、K2,PB口低七位依次接一七段数码管的a~g。
要求系统每隔2秒检测开关状态并更新数码管显示数值:若K0、K1均断开,则数码管将显示数值3;K0闭合、K1断开,则数码管将显示数值2;K0断开、K1闭合,则数码管将显示数值1;K0、K1均闭合,则数码管将显示数值0。
1、编写8255A的初始化程序片断,要求数码管初始状态显示0。
2、系统利用8253计数器2产生频率为500Hz的方波信号,利用计数器1产生周期为2秒的中断请求信号。
编写8253的初始化程序片断。
3、系统将8253计数1输出中断请求信号连接至8259A的IR1端口,设该端口对应中断类型号为41H,并采用普通全嵌套、普通中断结束方式。
写出8259A的初始化程序片断,要求屏蔽其他未使用的中断请求端口。
4、编写不断检测开关状态并更新显示数据的中断处理程序(设显示0-3字形的七段编码40H、79H……已存放在以TABLE为起始地址的存储单元中)。
5、编写采用系统功能调用实现设置中断向量的程序片断。
二、设计一8088微机系统,系统要求CPU配置工作在最小工作模式下,并配置存储器容量为16KB的EPROM,采用27128 (16Kx8位)芯片,地址为90000H—93FFFH;RAM容量为8KB,采用6264 (8Kx8位)芯片,地址为88000H—89FFFH。
在系统结构图的基础上,画出该8088最小方式系统与16KB ROM和8KB RAM存储器的连接图。
三、设计一8086微机系统,系统要求CPU配置工作在最小工作模式下,并配置存储器容量为32KB的EPROM,采用27128 (16Kx8位),芯片,地址为90000H—97FFFH;RAM容量为16KB,采用6264 (8Kx8位),芯片,地址为88000H—8BFFFH。
微机原理编程例题

1编程计算z=(X2-3y)/2,设x,y为单字节正整数,结果Z用两个字节来存放。
•DATA SEGMENT•X DB 25•Y DB 32•Z DW ?•DATA ENDS•;•CODE SEGMENT•ASSUME CS:CODE,DS:DATA•EXPRE PROC FAR•START:PUSH DS•SUB AX,AX•PUSH AX•MOV AX,DATA•MOV DS,AX•MOV AL,X•MUL AL ;X2•MOV BL,Y•ADD BL,BLADD BL,Y ;3Y•SUB AX,BX ; X2-3Y•SHR AX,1 ; (X2-3Y)/2•MOV Z,AX ;存放结果•EXPRE ENDP•CODE ENDS•END START2编程求S=∑i,并将S存入SUM单元•DATA SEGMENT•SUM DW ?DATA ENDS•CODE SEGMENT•ASSUME CS:CODE,DS:DATA•;•START:MOV AX,DATA•MOV DS,AX•MOV AX,0;和清零•MOV CX,100;设计数初值•ADD AX,CX;求和•DEC CX ;计数•JNZ AGAIN•MOV SUM,AX;存和•MOV AH,4CH•INT 21H•CODE ENDS•END START3在内存的字单元X中有一个16位的二进制数。
试编写一程序统计出X单元中含1的个数,并存入RESULT单元•DATA SEGMENT•X DW 31A0H•RESULT DW ?•DATA ENDS•CODE SEGMENT•ASSUME CS:CODE,DS:DATA•START PROC FAR•PUSH DS•XOR AX,AX•PUSH AX•MOV AX,DATA•MOV DS,AX•MOV CX,0; 初始化cx=0•MOV AX,X ;取X到AX•AGAIN: AND AX,AX;X=0•JZ EXIT ;X=0.退出•SHL AX,1•JNC NEXT ;CF=1?•JNC CX ;是,计数•NEXT:JMP AGAIN•EXIT: JMP AGAIN•EXIT: MOV RESULT,CX;存结果•RET•START ENDP•CODE ENDS•END START4在40个元素组成的数组中寻找第一个非0元素•MOV CX,28H•MOV SI.0FFH•NEXT:INC SI•CMP BYTE PTR[SI],0•LOOPZ NEXT•JNZ OKK•CALL DISPLAY1•RET•OKK: CALL DISPLAY2•RET5.PAGE 60,132;指定每页60行,132列TITLE 对两个字数据求和;为源程序指定标题•SSEG SEGMENT ;堆栈段开始•DW 20H ;定义堆栈段空间•SSEG ENDS ;堆栈段结束•DSEG SEGMENT ;数据段开始•AGRX DW 1234H ;定义被加数•AGRY DW 5678H ;定义加数•SUM DW ? ;定义存放结果的空单元•DSEG ENDS ;数据段结束•CSEG SEGMENT ;代码段开始•ASSUME CS:CSEG,DS:DSEG SS:SSEG •MOV AX,DSEG;初始化DS寄存器•MOV DS,AX•MOV AX,AGRX;取被加数到AX寄存器•MOV BX,AGRY;取加数到BX寄存器•ADD AX,BX; 两个数相加•MOV SUM,AX;存放结果•MOV AX,4C00H•INT 21H;程序正常退出•CSEG ENDS;代码段结束•END MAIN ;源程序结束。
微机原理三导程序题

E7.5若8086系统中采用单片8259作为外部可屏蔽中断的优先级管理,正常全嵌套方式,边沿触发非缓冲连接,非自动中断结束端口地址为20h和21h 其中某中断源的中断类型码为0ah,其中断服务子程序的入口地址为2000:3A40H请为8259a设置正确的初始化命令字,并编写初始化程序请问本题中的中断源应与IR的哪一个输入端相连,其中断矢量地址为多少,矢量区对应的四个单元的内容是什么MOV AL,l3H0UT 20H,ALMOV AL,08HOUT 21 H,ALMOV AL,01 HOUT 21 H,AIE7.6主:MOV AL,11HMOV DX,140HOUT DM,ALMOV AL,08HINC DXOUT DX,ALMOV AI,04HOUT DX,ALMOV AL,01HOUT DX,AL从:MOV AL,11 HOUT DX,ALMOV AL,70HINC DXOUT DX,ALMOV AL,02HOUT DX,ALMOV AL,01HOUT DX,ALE7.7若以8259a以三片级联的方式管理22级中断主:MOV AL,11HOUT 80H,ALMOV AL,60HOUT 81H,ALMOV AL,01000100BOUT 8IH,ALMOV AL,0000001IBOUT 81H,AL从A:MOV AL,1IHOUT 82H,ALMOV AL,70HOUT 83H,ALMOV AL,02HOUT 83H,ALMOV AL,03HOUT 83H,AL从B:MOV AL,11HOUT 84H,ALMOV AL,80HOUT 85H,ALMOV AL,06HOUT 85H,ALMOV AL,03HOUT 85H,ALE7.8在ibm pc /xt系统中,通过读取isr的值MOV AL,0BHOUT 20H,ALNOPIN AL,20HMOV AH,ALOR AL,AHJNZ HW—INTHW—INT:IN AI,21HOR AL,AHOUT 2lH,ALMOV AL,20H0UT 20H,AL7.1在某应用中,8259a工作于正常完全嵌套方式,要求在为中断源ir4服务时,设置特殊屏蔽方式,开放较低级的中断请求,请编写有关的程序片段,已知8259a的端口地址为20h 和21hMOV AL,68HOUT 20H,ALIN AL,21HOR AL,0001 0000BOUT 21H,ALSTI...CLTIN AL,21HAND AL,11101111BOUT 2IH,ALMOV AL,48HOUT 20H,AL…MOV AL,20HOUT 20H,ALIRET7.2请为中断类型码为0fh的外部中断源设置中断矢量,中断服务子程序名为interMOV AX,0MOV ES,AXMOV DI,0FH*4MOV AX,OFFSET INTERCLD7.3是按照如下要求对8259a设置初始化命令字:系统中有一片8259a,中断请求信号用电平触发方式,下面要用icw4设置嵌套及中断结束方式等状态,中断类型码为60h-67h用特殊全嵌套方式,无缓冲,采用自动中断结束方式。
微机原理课后习题答案解析

第1章进制及码元1、进制转换129= 81H= 10000001B=201Q298= 12AH= 100101010B=452Q1000= 3E8H= 1111101000B= 1750Q5DH= 1011101 B= 135 Q= 93 D3E8H= 1111101000 B= 1750Q= 1000 D;357Q=11101111 B= 0EF H= 239 D2、进制计算10010110 2FE3 F7,-119 FFF7,-32759 4 73、数据表示围:一个字节的无符号数表示围为0~255,有符号数补码表示围为-l28—+127。
两个字节的无符号数表示围为0~65535,有符号数补码表示围为—32768~+32767。
N位二进制数的无符号数表示围为0~(2N-1),有符号数(补码)表示围为-2N-1~(2N-1-1).4、35H代表的ASCII字符为'5',代表十六进制数时等价的十进制值为53 ,代表压缩8421BCD码等价的十进制值为35 ,代表非压缩8421BCD码等价的十进制值为5。
5、FFH代表无符号数时等价的十进制值为255 ,代表补码有符号数时等价的十进制值为一1 ,代表反码有符号数时等价的十进制值为一0 ,代表原码有符号数时等价的十进制值为一l27。
6、—20的8位二进制补码为 ECH ,原码为 94H ,反码为 EBH 。
158的16位二进制补码为009EH,原码为009EH ,反码为 009EH 。
7、英文字符一般在计算机占用(1)个字节,每个字节的最高位一定为0,全角英文字符在计算机占用2个字节,一个汉字在计算机占用2个字节,每个字节最高位为1。
8、设阶码用8位补码表示,尾数部分用16位补码表示,则—(1/32+1/128+1/512)的尾数部分及阶码分别为多少?第2章微机硬件基础1、请画出计算机系统硬件图。
2、8086/88CPU为什么要分为BIU和EU两大模块?答:为了使取指和分析、执行指令可并行处理,提高CPU的执行效率。
微机原理程序题

sign 与 sintegerch1 与 caps 均 sum 与 i 变量1. 将下面 C 语言程序的代码片段转换为功能等价的汇编语言代码片段, 其中 均为双字变量。
if ( sinteger = = 0) sign = = 0; else If ( siteger > 0) sign = 1; else sign = - 1; mov eax,sinteger mov edx,sign cmp eax,0 jnz L1 mov ebx,0L1:cmp ebx,0 jl L2 mov ebx,1 L2:mov ebx,-12. 将下面 C 语言程序的代码片段转换为功能等价的汇编语言代码片段,其中 为字节变量。
if (ch1> = ' a ' && ch1< = ' z ') caps= =0; if (ch1> = A ' '&& ch1< = 'Z ') caps= =1; mov ax,ch1 mov bx,capscmp ax,a jb next cmp ax,z ja next mov bx,0 next:cmp ax,A jl done cmp ax,Z ja done done:3. 将下面 C 语言程序的代码片段转换为功能等价的汇编语言代码片段,其中 均为双字变量。
sum=0;for ( i=1;i< =100;i++) if ( i%2= =0) sum=sum+i; mov ecx,i mov ecx,1 .while(ecx<=100) mov eax,ecx xor edx,edx mov ebx,2 div ebx cmp edx,0 jnz next add sum,ecx next:inc ecx .endw1. 能被 4 整除但不能被 100 整除,或者年被 400 整除的年份是闰年。
微机原理课后习题解答

微机原理习题第一章绪论习题与答案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码。
第三章微机原理习题课

.第三章习题课一、选择题1、在汇编语言程序的开发过程中使用宏功能的顺序是()。
A、宏定义,宏调用B、宏定义,宏展开C、宏定义,宏调用,宏展开D、宏定义,宏展开,宏调用2、汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是()。
A、名字项B、操作项C、操作数项D、注释项3、下列叙述正确的是()A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令4、编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有().A、CMPB、SUBC、ANDD、MOV5、测试BL寄存器容是否与数据4FH相等,若相等则转NEXT处执行,可实现的方法是()。
A TEST BL,4FHJZ NEXTB XOR BL,4FHJZ NEXTC AND BL,4FHJZ NEXTD OR BL,4FHJZ NEXT6、检查BUF的容是否为正偶数,如是正偶数,则令AL=0。
下面程序段正确的是( )。
A、MOV AL,BUF JS K1SHR AL,1JNC K1MOV AL,0K1:……B、MOV AL,BUF AND AL,11 JNZ K2MOV AL,0K2:……C 、MOV AL ,BUF TEST AL ,81H JNZ K3 MOV AL ,0 K3:……7、下列描述中,执行循环的次数最多的情况是()。
A .MOV CX ,0B .MOV CX ,1 LOP :LOOP LOP LOP :LOOP LOPC .MOV CX ,0FFFFHD .MOV CX ,256 LOP :LOOP LOP LOP :LOOP LOP8、在下列指令中,指令的执行会影响条件码中的CF 位。
微机原理及接口技术 例题3个

▪汇编语言源程序结构(P151数据段名SEGMENT 堆栈段名SEGMENT…数据段名ENDS 堆栈段名ENDS附加段名SEGMENT 代码段名SEGMENT…附加段名ENDS 代码段名ENDSEND【例4-1】已知X和Y是数据段中的两个无符号字节单元,用程序完成表达式Z=(X2+Y2)/2的计算。
DATA SEGMENTX DB 15Y DB 34Z DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;初始化数据段MOV AL,X ;X中的内容送ALMUL AL ;计算X×XMOV BX,AX ;X×X乘积送BXMOV AL,Y ;Y中的内容送ALMUL AL ;计算Y×YADD AX,BX ;计算X2+Y2 (这里的五个2是平方)SHR AX,1 ;计算(X2+Y2)/2MOV Z,AX ;结果送Z单元MOV AH,4CHINT 21H ;返回DOSCODE ENDSEND START ;汇编结束▪例:8086系统工作于最小模式下时,用64K×8的SRAM芯片构成128K×8的存储体,要求该存储体所占地址空间为00000H~1FFFFH。
画出数据线、地址线及有关控制信号的连接方法。
1、扩展存储器的数据线,地址线2、选用几片3、根据地址范围写出所有地址线,弄清楚哪些作为高地址线,哪些作为低地址线4、8086考虑奇偶地址,A0,BHE5、画出CPU,存储器芯片,连接数据线,读写控制逻辑,低地址线(片内地址线)6、根据高位地址线的状态接逻辑门或138译码器到片选信号输入端。
例8086系统扩展8255并行接口,其数据线接8086CPU数据线低8位,PA口接输出设备,PB口接输入设备,PC.7~PC.4 连接四个开关,由8086CPU将开关状态取入,然后根据开关状态去控制PC.3~PC.0驱动四个发光二极管(高电平亮,低电平灭)。
微机原理实验(含解答程序)

微机原理实验(含解答程序)-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN微机原理实验课题(共16个内容,附解答程序)(汇编程序可以使用MASM FOR WINDOWS)1.将偏移地址为2000h开始的100个单元依次设置为0~99。
2.将两个64位的二进制数相加,记录相加的和以及各个状态标志的值。
3. 编写程序,在屏幕上分行显示自己的姓名、学号。
4. 编写程序,通过键盘输入0——9之间的一个数字,利用查表法计算其平方。
在DEBUG下查看执行结果。
5. 用分支结构设计程序实现符号函数100010xy xx>⎧⎪==⎨⎪-<⎩,要求x和y存放在内存单元中,并将判断的结果在屏幕上显示输出。
6. 在键盘上输入一个字符,判断是否为小写字母,若不是,显示错误信息,若是,则将其转换为大写字母并显示。
7. 在键盘上输入一个字符,判断它是一个数字、大写字母还是小写字母,若为数字,则显示digital,若为字母,显示letter,否则,显示other。
8. 将字节型变量x的低四位(一位十六进制数)以十六进制数的形式显示。
9. 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N (N+1)大于200为止,并将结果由屏幕上显示出来。
10. 将字形变量x以二进制数的形式在屏幕上显示输出。
11. 将字形变量x以十六进制数的形式在屏幕上显示输出。
12. 将内存单元缓冲区中的符号数(20个)按从小到大的顺序排列,并以十六进制数的形式显示。
13. 编制程序计算S=1+2+3+……+N,并将结果由屏幕上显示出来。
(要求:在屏幕上显示提示信息,提示输入N,N用十六进制表示,且N小于0FH,用子程序实现(段内),将输入的结果用十六进制数输出显示,显示结果的程序用子程序是实现(段间))。
14.要求在键盘上输入一个小于四位的十进制数,将其转换为二进制数存放,并讲转换后的结果以十六进制数的形式在屏幕上显示出来。
(完整版)微机原理课后习题参考答案.doc

第一章2、完成下列数制之间的转换。
(1) 01011100B=92D(3)135D=10000111B(5)10110010B=262Q=B2H3、组合型 BCD 码和非组合型 BCD 码有什么区别?写出十进制数254 的组合型 BCD数和非组合型数。
答:组合型 BCD码用高四位和低四位分别对应十进制数的个位和十位,其表示范围是0~99;非组合型 BCD码用一个字节的低四位表示十进制数,高四位则任意取值,表示范围为0~9 。
组合型: 254=( 001001010100 )BCD非组合型: 254=(00000010 00000101 00000100 )BCD7、计算机为什么采用补码形式存储数据?当计算机的字长n=16,补码的数据表示范围是多少?答:在补码运算过程中,符号位参加运算,简化了加减法规则,且能使减法运算转化为加法运算,可以简化机器的运算器电路。
+32767~ -32768。
9、设计算机字长n=8,求下列各式的[X+Y]补和 [X-Y]补,并验证计算结果是否正确。
(1) X=18, Y=89 [X+Y]补 =00010010+01011001=01101011B=107D 正确[X-Y]补 =10111001B=00010010+10100111= ( -71D)补正确(2) X=-23, Y=-11 [X+Y]补 =11101001+11110101=11011110B= ( -34D)补正确[X-Y] =11101001+00001011=11110100B= ( -12D)补正确补(3) X=18, Y=-15 [X+Y]补=00010010+11110001=00000011B= ( 3D)补正确[X-Y] =00010010+00001111=00100001B= ( 33D)补正确补(4) X=-18, Y=120 [X+Y]补 =11101110+01111000=01100110B= ( 102D)补正确[X-Y] =11101110+10001000=01110110B= ( 123D)补由于 X-Y=-138 超出了机器数补范围,因此出错了。
微机原理经典课后作业,考试必考

微机原理经典课后作业,考试必考课后作业第一章作业1、若AX=AF7CH,BX=BEE7H,CPU分别执行加法指令和减法指令后各状态标志位的值是什么?2、8086系统中存储器的逻辑地址和物理地址之间有什么关系?3、设段地址为4ABFH,物理地址为50000H,求有效地址是什么?4、设CS=3100H,DS=3140H,两个段的空间均为64K个单元,问两个段重叠区为多少个单元?两个段的段空间之和为多少?5、在8086系统中,已知当前SS寄存器的内容为2345H,SP的内容0100H,请说明该堆栈段在存储器中的物理地址的范围。
若当前堆栈段中已存有10个字节的数据,那么原来SP的内容是什么数值?6、如果12MHz的振荡信号接至8284时钟输入端,其输出频率接8086/8088的CLK端。
求在插入一个等待周期的情况下从内存读一个字节数据所需的最小时间。
7、现有8个字节的数据为:34H、45H、56H、67H、78H、89H、9AH、ABH,假定它们在存储器中的物理地址为400A5H~400ACH。
若当前(DS)=4002H,求这8个数据的偏移地址。
如要以最少时间读出这些数据,需要访问存储器多少次?每次读出的数据是什么?并用图示之。
8、设段寄存器CS=2400H,指令指示器IP=6F30H,此时指令的物理地址PA 是多少?指向这一物理地址的CS值和IP值是否是唯一的?9、什么叫总线周期?8086/8088系统中的总线周期由几个时钟周期组成?如果CPU的主时钟频率为25MHz,一个时钟周期是多少?一个基本总线周期是多少时间?第三章作业3-3 若80386的控制寄存器CR0中PG、PE全为1,则CPU当前所处的工作方式如何?3-5 有一个段描述符,放在局部描述符表的第12项中,该描述符的请求特权级为2,求该描述符的选择子内容。
3-6 某一个段描述符的选择子内容为0531H,请解释该选择子的含义。
3-7在段页式管理中,若允许分页,则页的大小为多少?如果一个页面首地址为86B05000H,则上一页和下一页的页面首地址各为多少?第四章作业4-3 设有关寄存器及存储单元的内容如下:(DS)=2000H,(BX)=0100H,(SI)=0010H,(21200H)=78H,(21201H)=56H,(20100H)=68H,(21110H)=ABH,(20110H)=F4H,(20111H)=CDH,(21120H)=67H 试问下列各指令执行完后,AL或AX寄存器的内容各是什么?各指令寻址方式是什么?(1) MOV AX,1200H(2) MOV AL,BL(3) MOV AX,[1200H](4) MOV AL,[BX](5) MOV AL,1010H[BX](6) MOV AX,[BX][SI](7) MOV AL,1010H[BX][SI]4-4 判断下列指令的正误,若是错误的,请说明原因。
微机原理及接口例题及解答

1、例编写程序,计算75÷6=l 2 (3)解:该除法运算过程表示如下:(注:75以BCD码的形式存放)第一个商为1→ 1 2 ← 第二个商为26/ 7 5- 6-----------------第一个余数为1→ 1 5- 1 2-----------------3 ← 第二个余数为3程序如下:FIRST DB 06H ;除数6SECOND DB 75H ;被除数75HTHIRD DB 2 DUP(0);存商FOUR DB ?;存余数………MOV AH,00H ;第一个被除数高位AH清0MOV AL,SECOND ;AL 被除数75AND AL,0F0H ;截取高4位MOV CL,04HROL AL,CL ;移至低4位DIV FIRST ;AX/06,即0007/06;;得结果:AL商为1,AH余数1MOV THIRD+1,AL ;结果单元第一个商1MOV AL,SECOND ;AL被除数75AND AL,0FH ;AL截低4位,故AX=0105HAAD ;将AX中内容0105H调整为0FHDIV FIRST ;0FH/6,结果:AL商为2,AH余数3 MOV THIRD,AL ;THIRD单元第二个商2MOV FOUR,AH ;FOUR单元第二个余数32、例设AL寄存器中存有报警标志。
若D7=1,表示温度报警,程序要转到温度报警处理程序T_ ALARM;D6=1,则转压力报警程序P_ALARM。
用TEST指令来实现这种功能。
解:TEST AL,80H ;查AL的D7=1?JNZ T_ALARM ;是1(非零),则转温度报警程序TEST AL,40H ;D7=0,D6=1?JNZ P_ALARM ;是1,转压力报警(其中:JNZ为条件转移指令,表示结果非0 (ZF=1)则转移)3、例要求把数据段中以SRC_MESS为偏移地址的一串字符“HELLO!”,传送到附加段中以NEW_LOC开始的单元中。
微机原理课后习题参考答案_2011_简版

习题答案1-6 将下列十进制数转换为二进制数、十六进制数和BCD 数 (1)124.625 (6)268.875 解:(1)124=01111100B =7CH ,0.625×16=10,所以0.625=0.AH=0.1010B ∴124.625=7C.AH=01111100.1010B=000100100100.011000100101BCD(2)268=256+12=100001100B =10CH ,0.875×16=14,∴0.875=0.EH=0.1110B. ∴268.875=10C.EH=100001100.111B=001001101000.100001110101BCD 1-7 用16位二进制数表示出下列十进制数的原码、反码和补码。
(1)+128 (4)-5 解:(1)+128 的原码和补码反码均为0000000100000000B(4)-5的原码为1000000000000101B ,反码为1111111111111010B ,补码为1111111111111011B 。
1-10 试绘出以下十六进制数在内存中存放的示意图。
设存放地址均为00H 。
解:(1)F7H (2)03BAH (3)C804326BH (4)1122334455667788H2-1 请将左边的术语和右边的含义联系起来,在括号中填入你选择的代号字母: 1. 字长 (i )a. 指由8个二进制位组成的通用基本单元。
2. 字节 (a )b. 是CPU 执行指令的时间刻度。
3. 指令 (h )c. μPS 所能访问的存储单元数,与CPU 地址总线条数有关。
4. 基本指令执行周期(g )d. 唯一能代表存储空间每个字节单元的地址,用5位十六进制数表示。
5. 指令执行时间 (j )e. CPU 访问1次存储器或I/O 操作所花的时间。
6. 时钟周期 (b )f. 由段基址和偏移地址两部分组成,均用4位十六进制数表示。
微机原理课后第39题

39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字0~9 组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。
(3)按数字键“3”,完成输入数据组的排序。
用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。
(4)按数字键“4”,完成时间的显示。
首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。
按任一键重新对时;按Esc键返回主菜单。
(5)按数字键“5”,结束程序的运行,返回操作系统。
解:※主程序的编程思路:四、程序代码STACK SEGMENT STACKDB 256 DUP(?)TOP LABELWORDSTACK ENDSDATA SEGMENTTABLE DW G1, G2, G3, G4, G5STRING1 DB '1. Change small letters into capital letters of string;', 0DH, 0AH, '$'STRING2 DB '2. Find the maximum of string;', 0DH, 0AH, '$'STRING3 DB '3. Sort for datas;', 0DH, 0AH, '$'STRING4 DB '4. Show Time;', 0DH, 0AH, '$'STRING5 DB '5. Exit.', 0DH, 0AH, '$'STRINGN DB 'Input the number you select (1-5) : $'IN_STR DB 'Input the string (including letters & numbers, less than 60 letters) :', 0DH, 0AH, '$' PRESTR DB 'Original string : $'NEWSTR DB 'New string : $'OUT_STR DB 'The string is $'MAXCHR DB 'The maximum is $'IN_NUM DB 'Input the numbers (0 - 255, no more than 20 numbers) : ', 0DH, 0AH, '$'OUT_NUM DB 'Sorted numbers : ', 0DH, 0AH, '$'IN_TIM DB 'Correct the time (HH:MM:SS) : $'HINTSTR DB 'Press ESC, go back to the menu; or press any key to play again!$' KEYBUF DB 61DB ?DB 61 DUP (?)NUMBUF DB ?DB 20 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOVAX, DATAMOV DS, AXMOVAX, STACKMOV SS, AXMOV SP, OFFSET TOPMAIN: CALL FAR PTR MENU ; 设置显示器AGAIN:MOVAH, 2MOV BH, 0 ; 页号MOV DL, 41 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOVAH, 1INT 21HCMPAL, '1'JB AGAINCMPAL, '5'JAAGAINSUB AL, '1' ; N-1SHLAL, 1 ; (N-1)*2CBW ; AL->AXLEA BX, TABLEADD BX, AXJMPWORD PTR [BX]G1:CALL FAR PTR CHGLTRMOVAH, 8INT 21HCMPAL, 1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOVAH, 8INT 21HCMPAL, 1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUM MOVAH, 8INT 21HCMPAL, 1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHK MOVAH, 8INT 21HCMPAL, 1BHJZ MAINJMP G4G5:MOVAH, 4CHINT 21HMENU PROC FAR ; 显示主界面;设置显示器方式MOVAH, 0MOVAL, 3;MOV BL, 0;INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRING1INT 21HMOVAH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRING2INT 21HMOVAH, 2MOV DL, 5 ; 列号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRING3INT 21HMOVAH, 2MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRING4INT 21HMOVAH, 2MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRING5INT 21HMOVAH, 2MOV DL, 5 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOVAH, 9LEA DX, STRINGNINT 21HRETMENU ENDPCHGLTR PROC FAR ; 将输入字符串中小写字母便换成大写字母RECHG:;设置显示器方式MOVAH, 0MOVAL, 3MOV BL, 0INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOVAH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOVAH, 2MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOVAH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ RECHG ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOVAL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串尾加结束标志$ MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOVAH, 9LEA DX, PRESTRINT 21H ; 输出源字符串提示MOVAH, 9LEA DX, KEYBUF + 2INT 21H ; 输出源字符串LEA BX, KEYBUF + 2LCHG:CMP BYTE PTR [BX], 61HJB NOCHGAND BYTE PTR [BX], 0DFHNOCHG:INC BXLOOP LCHG ; 将字符串中小写字母转换成大写字母MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOVAH, 9LEA DX, NEWSTRINT 21H ; 输出新字符串提示MOVAH, 9LEA DX, KEYBUF + 2INT 21H ; 输出新字符串MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOVAH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETCHGLTR ENDPMAXLTR PROC FAR ; 在输入字符串中找出最大值REMAX:;设置显示器方式MOVAH, 0MOVAL, 3MOV BL, 0INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOVAH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOVAH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOVAH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ REMAX ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOVAL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串位加结束标志$ MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOVAH, 9LEA DX, OUT_STRINT 21H ; 输出字符串提示MOVAH, 9LEA DX, KEYBUF + 2INT 21H ; 输出字符串MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOVAH, 9LEA DX, MAXCHRINT 21H ; 输出字符串中最大值提示MOV DL, 0LEA BX, KEYBUF + 2LCMP:CMP [BX], DLJB NOLCHGMOV DL, [BX]NOLCHG:INC BXLOOP LCMP ; 找出字符串中最大字符,放入DL MOVAH, 2INT 21H ; 输出字符串中最大字符MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOVAH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETMAXLTR ENDPSORTNUM PROC FAR ; 对输入数据组排序RESORT:;设置显示器方式MOVAH, 0MOVAL, 3MOV BL, 0INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOVAH, 9LEA DX, IN_NUMINT 21HMOVAH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入数据组光标位置设置MOVAH, 0AHLEA DX, KEYBUFINT 21H ; 输入数据组字符串CALL CIN_INT ; 字符串转换成数据串CMPAL, 0JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT ; 判断数据串是否为空MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 输出提示光标位置设置MOVAH, 9LEA DX, OUT_NUMINT 21H ; 输出数据串提示MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 输出数据组光标位置设置CALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOVAH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETSORTNUM ENDPCIN_INTPROC NEAR ; 读入整型数; 入口参数:无; 出口参数为:AL(有无错误标志,0为有,1为无)MOV CL, KEYBUF + 1LEA SI, KEYBUF + 2MOV CH, 0 ; 数据组数据个数置0MOV DH, 10MOVAL, 0 ; 当前数据x=0MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR [SI], ' 'JZ ADDNUM ; 判断当前字符是否为空格CMP BYTE PTR [SI], '0'JB ERRNUMCMP BYTE PTR [SI], '9'JA ERRNUM ; 判断当前字符是否在'0'-'9'之间MOV DL, 1 ; 有无数据标志置1,即有数据MULDHXOR BH, BHMOV BL, [SI]ADD AX, BXSUB AX, '0' ; 计算出当前数据xCMPAH, 0JA ERRNUM ; 判断x 是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1CALLADDNEWMOV DL, 0MOVAL, 0 ; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符CMP DL, 1JNZ TOTAL ; 判断是否有未加入的数据INC CHCALLADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOVAL, 1 ; 输入数据无错误JMP CRTNUMERRNUM:MOVAL, 0 ; 输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEW PROC NEAR ; 增加新数; 入口参数:CH(数据组数据个数)、AL(当前数据x); 出口参数:无PUSH AXLEA BX, NUMBUFMOVAL, CHCBWADD BX, AXPOPAXMOV [BX], ALRETADDNEW ENDPMPSORT PROC FAR ; 数据组排序MOVAL, NUMBUFCMPAL, 1JBE NOSORT ; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX ; SI指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CXPUSH SIMOV DL, 0 ; 交换标志置0LP2: ; 内循环开始MOVAL, [SI]CMPAL, [SI - 1]JAE NOXCHGXCHG AL, [SI - 1] ; 交换操作MOV [SI], ALMOV DL, 1 ; 交换标志置1NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT ; 判断交换标志LOOP LP1NOSORT:RETMPSORTENDPINT_OUT PROC FAR ; 输出数据组MOVAL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOVAL, [SI]CALL OUTNUMINC SIMOVAH, 2MOV DL, ' 'INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUM PROC NEAR ; 将十进制数以十六进制输出; 入口参数:AL(待转换的数据),BL(转换进制数16); 出口参数:无MOVAH, 0DIV BLPUSH AXCMPAH, 10JB PNUMADD AH, 7PNUM: ADD AH, 30HMOV DL, AHPOPAXPUSH DXCMPAL, 0JZ OUTNCALL OUTNUMOUTN:POPDXMOVAH, 2INT 21HRETOUTNUM ENDPTIMCHK PROC FAR ; 设定并显示时间;设置显示器方式MOVAH, 0MOVAL, 3;MOV BL, 0;INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 设置提示光标位置设置MOVAH, 9LEA DX, IN_TIMINT 21H ; 时间串提示MOVAH, 0AHLEA DX, KEYBUFINT 21H ; 输入时间串MOV BL, 10MOVAL, KEYBUF + 2SUB AL, '0'MUL BLADD AL, KEYBUF + 3SUB AL, '0'CMPAL, 0JB INVALIDCMPAL, 24JAE INVALID ; 判断时有效性MOV CH, ALMOVAL, KEYBUF + 5SUB AL, '0'MUL BLADD AL, KEYBUF + 6SUB AL, '0'CMPAL, 0JB INVALIDCMPAL, 60JAE INVALID ; 判断分有效性MOV CL, ALMOVAL, KEYBUF + 8SUB AL, '0'MUL BLADD AL, KEYBUF + 9SUB AL, '0'CMPAL, 0JB INVALIDCMPAL, 60JAE INVALID ; 判断秒有效性MOV DH, ALMOV DL, 0MOVAH, 2DHINT 21H ; 置系统时间INVALID:CALL TIMERETTIMCHK ENDPTIME PROC ; 显示时间子程序;设置显示器方式MOVAH, 0MOVAL, 3;MOV BL, 0;INT 10H ; 清屏MOVAH, 2MOV BH, 0 ; 页号MOV DL, 10 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOVAH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息DISP1:MOVAH, 2MOV BH, 0 ; 页号MOV DL, 72 ; 列号MOV DH, 0 ; 行号INT 10H ; 提示光标位置设置MOVAH, 2CH ; 取系统时间,CH,CL,DH 分别存放时/分/秒INT 21HMOVAL, CH ; 显示时CALL SHOWNUMMOVAH, 2MOV DL, ':'INT 21HMOVAL, CL ; 显示分CALL SHOWNUMMOVAH, 2MOV DL, ':'INT 21HMOVAL, DH ; 显示: 秒CALL SHOWNUMMOVAH,02H ; 设置光标位置MOV DX,090AHMOV BH,0INT 10HMOV BX,0018HRE: MOV CX,0FFFFH ; 延时REA: LOOP READEC BXJNZ REMOVAH, 0BH ; 或MOVAH, 01HINT 21H ; INT 16HCMPAL, 0 ; JE DISP1JZ DISP1 ; 检查键盘状态RETTIME ENDPSHOWNUM PROC ; 把AL中的数字以十进制输出; 入口参数:AL(待显示的数据); 出口参数:无CBWPUSH CXPUSH DXMOV CL, 10DIV CLADD AH, '0'MOV BH, AHADD AL, '0'MOVAH, 2MOV DL, ALINT 21HMOV DL, BHINT 21HPOPDXPOP CXRETSHOWNUM ENDPCODE ENDSEND START五、实验结果运行程序。
微机原理实例程序

《微机原理》学习实例程序〔非原创,为收集的,都通过了实物测试〕2011-7,RTX数字录音机一、实验目的1、了解数字录音技术的基本原理。
2、进一步掌握A/D转换器与D/A转换器的使用方法。
二、实验内容1、按图41连接电路,将声传感器接J2,把代表语音的电信号送给ADC0809通道2(IN2);D/A转换器的输出端通过K8跳线接喇叭。
2、编程,以每秒钟5000次的速率采集IN2输入的语音数据并存入内存,共采集60000个数据(录12秒),然后再以同样的速率将数据送DAC0832使喇叭发声(放音)。
三、实验提示1、将8253设置成方式0,计数200个,(定时0.2ms),利用PA0查询OUT0电平,若高电平表示定时时间到。
2、ADC0809通道2(IN2)的口地址为298Hdata segmentioport equ 01400h-0280hluport equ ioport+29ah ;录音口地址fangport equ ioport+290h ;放音口地址io8253a equ ioport+283hio8253b equ ioport+280hio8255c equ ioport+28bhio8255d equ ioport+288hdata_qu db 60000 dup(?) ;录音数据存放数据区news_1 db 'Press any key to record:',24h ;录音提示news_2 db 0dh,0ah,' Playing:',24h ;放音提示data endscode segmentassume cs:code,ds:data,es:databegin: mov ax,data ;初始化mov ds,axmov es,axmov dx,offset news_1 ;显示录音提示mov ah,9int 21htest_1: mov ah,1 ;等待键盘输入int 16hjz test_1 ;若不是则循环等待call lu ;调用录音子程序mov dx,offset news_2 ;显示放音提示mov ah,9int 21hfy: call fang ;调用放音子程序mov ax,0c07hint 21hcmp al,20hjz fymov ah,4ch ;返回DOSint 21hlu proc near ;录音子程序mov di,offset data_qu ;置数据区首地址为DImov cx,60000 ;录60000个数据cldxunhuan: mov dx,luport ;启动A/Dout dx,alcall delay ;延时in al,dx ;从A/D读数据到ALstosb ;存入数据区,使DI加1loop xunhuan ;循环ret ;子程序返回lu endpfang proc near ;放音子程序mov cx,60000 ;放60000个数据mov si,offset data_qu ;置数据区首地址为SIcldfang_yin: mov dx,fangportlodsb ;从数据区取出数据sub al,30hout dx,al ;放音call delay ;延时loop fang_yin ;循环ret ;子程序返回fang endpdelay proc n ear ;延时子程序push dxmov al,10h ;设8253通道0工作方式0mov dx,io8253aout dx,almov al,200 ;写入计数器初值200mov dx,io8253bout dx,almov dx,io8255c ;设8255的A口为输入mov al,9bhout dx,almov dx,io8255d ;从8255的A口输入delay1: in al,dxand al,1 ;判断PA0是否为1jz delay1 ;若PA0不为1,转de_laypop dxret ;子程序返回delay endpcode endsend begin数模转换器正弦波一、实验目的了解数/模转换器的基本原理,掌握DAC0832芯片的使用方法。
微机原理习题集读程序写结果

读程序A类:1、 CLCMOV AX,248BHMOV CL,3RCL AX,CL执行以上程序序列后, AX=______2458H______________。
2、设TABLE DW 3467H,7367H,0A566H,665DH,767FHENTRY DW 3若执行下列指令:MOV BX,OFFSET TABLEADD BX,ENTRYMOV AX,[BX]结果,AX=___6673H_______(用十六进制表示)3、(A) (B)MOV CX,77H MOV CX,77HMOV BX,88H MOV BX,88HNEXT: MOV AX,4500H NEXT: MOV AX,4500HDEC BX DEC BXLOOP NEXT LOOPNZ NEXT问程序段A,B执行中各循环多少次?程序段 A循环_____77H__________次,程序段B循环______77H_____次。
4.MOV AX,9090HSUB AX,4AE0HJC L1JO L2JMP L3上述程序执行后AX= 45B0H ,程序转向 L25.假设寄存器AX=1234H,DX=0A000HMOV BX,0MOV CX,BXSUB CX,AXSBB BX,DXMOV AX,CXMOV DX,BX上述程序段执行后AX= EDCCH ,DX=F5FFH程序功能是:对DX:AX组成的32位数进行求补6.已知8253端口地址为80H、82H、84H、86H,初始化程序如下,说明程序的含义。
MOV AL,67HOUT 86H,ALMOV AL,80HOUT 82H,AL该程序含义是7.阅读下列程序,并回答问题NAME EAM4-2DATA SEGMENTA DB 4HB DB 52HC DB 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,AADD AL,BDAAMOV C,ALLAHFAND AH,01HMOV C+1,AHMOV AH,4CHINT 21HCODE ENDSEND START问程序运行后:C DB ,(注:请填上数据)8.已知程序段如下:MOV AX,1234HMOV CL,4ROL AX,CLDEC AXMOV CX,4MUL CXINT 20H试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?10.设一个字节数据X存放AL寄存器中,试说明下列程序的功能:XOR AH,AH ;AH清零SAL AX,1 ;AX左移一位,相当于2XMOV BX,AX ;2X送BX暂存MOV CL,2SAL AX,CL ;AX左移二位,2X×4=8XADD AX,BX ;2X+8X=10X解:该段程序实现了字节数据X乘10,结果在AX中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;例4-1STACKS SEGMENT STACK ;堆栈段DW 128 DUP(?) ;注意这里只有128个字节STACKS ENDSDATA SEGMENTX DB 25Y DB 32Z DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATA ;初始化DSMOV DS, AXMOV AL, XMUL AL ;求X2MOV BL, YADD BL, BL ;Y+YADD BL, Y ;Y+Y+YSUB AX, BX ;X^2-3YSHR AX, 1 ;(X^2-3Y)/ 2;MOV Z, AX ;结果送ZCALL SHOWMOV AH,7 ;暂停INT 21HMOV AH, 4CH ;返回操作系统INT 21H;内存AX中的数据在屏幕上以十进制形式显示出来SHOW:XOR CX,CXMOV BX,10NX1:XOR DX,DX ;余数清零DIV BX ; AX除以10OR DX,0E30H ; ASCII码调整INC CX ; 计数器加1PUSH DX ; 余数进栈CMP AX,0JNZ NX1NX2: POP DXMOV AH,2INT 21H ;显示LOOP NX2 ; CX不为0循环RETCODE ENDSEND START ;汇编结束;例4-2DATA SEGMENTTABLES DB 30H,31H,32H,33H,34H,35H,36H,37H ;建立ASCII表DB 38H,39H,41H,42H,43H,44H,45H,46HHEX DB 04H ;假定要查的十六进制数为4ASCI DB ? ;存放查表的结果DATA ENDSSTACK1 SEGMENT STACKDW 20H DUP(0) ;建立堆栈段STACK1 ENDSCOSEG SEGMENTASSUME CS:COSEG, DS:DATA, SS:STACK1BEING: MOV AX, DATAMOV DS, AXMOV BX, OFFSET TABLES ;表首地址送BXMOV AL, HEX ;表内位移量送ALXLAT ;查表MOV ASCI,AL ;结果送ASCIMOV DL, ALMOV AH, 2 ;调用DOS中断2号功能显示结果INT 21HMOV AH,7INT 21HMOV AH, 4CH ;返回操作系统INT 21HCOSEG ENDSEND BEING;例4-3奇校验程序,ASCII显示DATA SEGMENTMSG DB 10,13,'$'X DB ?Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,1 ;读入一个键INT 21HMOV X,AL ;存原值AND AL, 7FH ;最高位置"0"、其他位不变;同时标志PF反映"1"的个数JNP NEXT ;个数为奇数,不需处理,转移OR AL, 80H ;个数为偶数,最高位置"1"、其他位不变NEXT: MOV Y,AL ;奇校验后的值MOV BL, XCALL SHOWMOV BL, YCALL SHOWMOV AH,4CH ;正常结束INT 21H;BL中字符的ASCII码显示SHOW PROCMOV DX,OFFSET MSGMOV AH,09HINT 21H ;回车换行MOV CX, 8 ;8位NEXT1: SHL BL,1 ;依次析出高位MOV DL,30HADC DL,0 ;转换得ASCII码MOV AH,2INT 21H ;显示之LOOP NEXT1MOV DL,'B'MOV AH,2 ;显示二进制数表示符INT 21HRETSHOW ENDPCODE ENDSEND START4-4 DATA SEGMENTX DB 3 ;假定X=3Y DB ?DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV AL, XCMP AL, 0 ;X和0比较JGE BIGER ;X>=0跳转到BIGERMOV AL, 0FFH ;X<0,-1送Y单元MOV Y, ALJMP NEXT ;跳过处理X>=0的程序段BIGER: JE EQUL ;X=0跳转到EQULMOV AL, 1 ;X>0,1送Y单元MOV Y, ALJMP NEXT ;跳过处理X=0的程序段EQUL: MOV Y, AL ;X=0,0送Y单元NEXT: XOR AH,AHMOV AL,YCALL SHOWMOV AH,7 ;暂停INT 21HMOV AH, 4CH ;返回操作系统INT 21H;内存AX中的数据在屏幕上以十进制形式显示出来SHOW:XOR CX,CXMOV BX,10NX1:XOR DX,DXDIV BXOR DX,0E30HINC CXPUSH DXCMP AX,0JNZ NX1NX2: POP AXINT 10HLOOP NX2RETCODE ENDSEND START例4-5求1+2+...+100DATA SEGMENTSUM DW ? ;存放结果DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATA ;数据段寄存器赋初值MOV DS, AX;循环初始化SUB AX, AX ;工作寄存器清零MOV CX, 100 ;计数器赋初值CLC ;清除进位标志;循环体开始LP: INC AXADC SUM, AXLOOP LP ;循环控制MOV AX,SUMCALL SHOWMOV AH,7 ;暂停INT 21HMOV AH, 4CH ;返回操作系统INT 21H;内存AX中的数据在屏幕上以十进制形式显示出来SHOW:XOR CX,CXMOV BX,10NX1:XOR DX,DXDIV BXOR DX,0E30HINC CXPUSH DXCMP AX,0JNZ NX1NX2: POP AXINT 10HLOOP NX2RETCODE ENDSEND START;例4-7DATAS SEGMENTMSG DB 'welcome','$' ;定义大写字母字符串DATAS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATASSTART: MOV AX, DATASMOV DS, AXMOV BX,0 ;BX=0指向第一个字母LOOP1: SUB MSG[BX], 'a'-'A' ;小写字母减20H转换为大写INC BX ;指向下一个字母CMP MSG[BX],'$' ;下一个字符不是'$'则继续转换JNZ LOOP1MOV DX,OFFSET MSG ;调用9号功能显示字符串MOV AH,9INT 21HMOV AH,7INT 21HMOV AH,4CHINT 21HCODES ENDSEND START4-8 DATAS SEGMENTN DW ? ;存放累加的自然数个数SUM DW ? ;存放累加和MSG DB 10,13,'$'DATAS ENDSCODES SEGMENTASSUME CS:CODES, DS:DATASSTART: MOV AX, DATASMOV DS, AXMOV AX, 0 ;存放累加和MOV BX, 0 ;存放每次取得的自然数MOV CX, 0 ;统计自然数的个数LOOPT: INC BX ;取得下一个自然数ADD AX, BXINC CX ;自然数个数加1CMP AX, 1000 ;累加和不大于1000则继续循环JBE LOOPTMOV N, CX ;送自然数个数MOV SUM,AX ;送累加和MOV AX,NCALL SHOWMOV DX,OFFSET MSGMOV AH,09HINT 21H ;回车换行MOV AX,SUMCALL SHOWMOV AH,7 ;暂停INT 21HMOV AH, 4CH ;返回操作系统INT 21H;内存AX中的数据在屏幕上以十进制形式显示出来SHOW:XOR CX,CXMOV BX,10NX1:XOR DX,DXDIV BXOR DX,0E30HINC CXPUSH DXCMP AX,0JNZ NX1NX2: POP AXINT 10HLOOP NX2RETCODES ENDSEND START;习题3-8,找最大值DATA SEGMENTZSP DB 1H,2H,3H,4H,5H,16H,7H,8H,9H,10H RESULT DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX ,DATAMOV DS,AXXOR AX,AXMOV BX,OFFSET DATAMOV AL,[BX]MOV CX,9LP: INC BXCMP AL,[BX]JAE NEXTMOV AL,[BX]NEXT: DEC CXJNZ LPMOV RESULT,ALCALL SHOWMOV AH,7HINT 21HMOV AH,4CHINT 21HSHOW: XOR CX,CXMOV BX,10HNX1: XOR DX,DXDIV BXOR DX,0E30HINC CXPUSH DXCMP AX,0HJNZ NX1NX2: POP AXINT 10HLOOP NX2RETCODE ENDSEND START;习题3-11,统计DATA1带符号数中正数的个数DATA SEGMENTDATA1 DB 10,-2,3,-4,-5,2,-7,8,9,10DATA2 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX ,DATAMOV DS,AXMOV BX,OFFSET DATA1MOV AL,0MOV CX,10LP:MOV AH,[BX]AND AH,80H ;判断正负JNZ NEXTINC ALNEXT: INC BXDEC CXJNZ LPMOV DATA2,AL ;存结果CALL SHOWMOV AH,7HINT 21HMOV AH,4CHINT 21HSHOW: XOR CX,CXMOV BX,10HNX1: XOR DX,DXDIV BXOR DX,0E30HINC CXPUSH DXCMP AX,0HJNZ NX1NX2: POP AXINT 10HLOOP NX2RETCODE ENDSEND START;习题3-13,在字符串中找@的位置STACKS SEGMENT STACK ;堆栈段DW 128 DUP(?) ;注意这里只有128个字节STACKS ENDSDATAS SEGMENT ;数据段MSG DB "GHHD!#%^&KHJK@GDJHL$"DATAS ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS ;初始化MOV DS,AXMOV BX,OFFSET MSGLL: CMP MSG[BX],'$'JZ NEXT1CMP MSG[BX],'@'JZ NEXTINC BXJMP LLNEXT1: MOV BX,0NEXT: MOV AX,BXCALL SHOWMOV AH,7HINT 21HMOV AX,4C00H ;退出程序INT 21HSHOW:XOR CX,CXMOV BX,10NX1:XOR DX,DX ;余数清零DIV BX ; AX除以10OR DX,0E30H ; ASCII码调整INC CX ; 计数器加1PUSH DX ; 余数进栈CMP AX,0JNZ NX1NX2: POP AXINT 10H ;显示LOOP NX2 ; CX不为0循环RETCODES ENDSEND START;习题4-7,三个数排序DATA SEGMENTN EQU 3 ;参加排序的个数ADDR DB 5,8,6X DW 0DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV CX, N ;内循环变量存于CX中,初值为N-1。