版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
______________________________________________________________________________________________________________
第1章绪论作业
1.将下列二进制数转换成十进制数。
(1)11001010B=202(2)00111101B=61
(3)01001101B=77(4)10100100B=164
3.将下列十进制数分别转换为二进制数和十六进制数。
(2)76=1001100B=4CH
(4)134=10000110B=86H
4.求下列十进制数的BCD码
(1)327=1100100111(BCD码)
(2)1256=1001001010110(BCD码)
6.求出下列10进制数的原码、反码和补码
(2)+85(4)-85
解:85=01010101B
原码:+85=01010101B-85=11010101B
反码:+85=01010101B-85=10101010B
补码:+85=01010101B-85=10101011B
10.画出微型计算机的基本结构框图,说明各部分的主要功能是什么?
解:
微型计算机的基本结构框图如下:
微处理器地址总线
存储器I/O接口I/O设备
CPUI/O总线
数据总线
控制总线
微处理器CPU:控制微处理器与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控
制程序流向。
微处理器主要完成:
(1)指令控制:从存储器中取指令,指令译码;
(2)数据加工:简单的算术逻辑运算;
(3)操作控制:在微处理器和存储器或者I/O之间传送数据;
(4)时间控制:程序流向控制。
存储器:用来存放数据和指令。
I/O接口:主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等
-可编辑修改-
______________________________________________________________________________________________________________
各种功能。
I/O设备:输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。输出运算结果。
总线:连接计算机系统中各功能部件的信息通道。
第2章8086CPU作业
2.8086CPU内部由哪两部分组成?它们的大致是如何工作的?
答:
(1)8086CPU由指令执行部件EU和总线接口部件BIU两部分组成。
(2)
①BIU先执行读存储器操作,从给定地址单元中取出指令,送到先进先出的指令队列中等待执行。
存储器的物理地址=CS16+IP,在地址加法器中形成。
②EU从指令队列中取走指令,经EU控制器译码分析后,向各部件发控制命令,以完成执行指令的操
作。BIU与EU是并行工作方式。
③当指令队列已满,EU在执行指令,未向总线接口单元BIU申请读/写内存或I/O操作时,BIU处于
空闲状态。
④指令执行过程中,若需对存储器或I/O端口存取数据,EU就要求BIU去完成相应的总线周期。
5.两个带符号数10110100B和11000111B相加,运算后各标志位的值等于多少?哪些标志位是有
意义的?如果把这两个数当成无符号数,相加后哪些标志位是有意义的?
解:
(1)两个带符号数:不考虑CF标志
10110100
+11000111
101111011
运算后各标志位状态如下:
CF=1,有进位,对于带符号数,无意义。
PF=1,结果有偶数个1
AF=0,无半进位,非BCD码运算,无意义。
ZF=0,结果非0
SF=0,结果为正数
OF=1,溢出(两个负数相加,结果变成了正数)
(2)两个无符号数:不考虑SF和OF标志
10110100
+11000111
101111011
运算后各标志位状态如下:
CF=1,有进位
PF=1,结果有偶数个1
ZF=0,结果非0
AF、SF、OF无意义。
20.简要解释下列名词的意义。
CPU:中央处理单元CPU(ControlProcessingUnit)也称微处理器,是微型计算机的核心部件,由
运算器ALU、控制器、寄存器组以及总线接口等部件组成。主要完成各种运算,负责对整机的控制。
存储器:用于存储程序和数据的硬件设备。
堆栈:堆栈是一种数据结构,是内部RAM的一段区域。设置堆栈的目的是用于数据的暂存,中断、子
程序调用时断点和现场的保护与恢复。
IP:指令指针寄存器,用于控制CPU的指令执行顺序(只存放偏移量),只能和代码段寄存器CS配合
使用,可以确定当前所要取的指令的内存地址,且始终指向代码段中下一条将要读取到CPU指令队列的那
条指令。顺序执行程序时,CPU每取一个指令字节,IP自动加1,指向下一个要读取的字节。
SP:堆栈指针寄存器,用于指示堆栈的栈顶地址偏移量的寄存器,它决定了堆栈在内部RAM中的物理
位置。只能和SS段寄存器配合使用,且始终指向堆栈的栈顶,在堆栈指令中隐含的使用它来定位栈顶数据。
BP:基址指针寄存器。用于存放偏移量,通常和SS段寄存器配合使用,在间接寻址中用于定位堆栈段
中的内存单元。
段寄存器:由于CPU内部的寄存器都是16位的,为了能够提供20位的物理地址,8086系统中采用了
存储器分段的方法。规定存储器的一个段为64KB,由段寄存器来确定存储单元的段基址,由指令提供该单
元相对于相应段起始地址的16位偏移量。
状态标志:表示前一步操作(如加、减等)执行以后,ALU所处的状态,后续操作可以根据这些状态
-可编辑修改-
______________________________________________________________________________________________________________
标志进行判断,实现转移。
控制标志:可以通过指令人为设置,用以对某一种特定的功能起控制作用(如中断屏蔽等),反映了人
们对微机系统工作方式的可控制性。
物理地址:存储器的实际地址,它是指CPU和存储器进行数据交换时所使用的地址。物理地址是由段
地址与偏移地址共同决定的,计算物理地址的表达式为:
物理地址=段地址×16+偏移地址
逻辑地址:是在程序中使用的地址,它由段地址和偏移地址两部分组成。
逻辑地址的表示形式为“段地址:偏移地址”。
机器语言:直接用二进制编码表述的指令系统语言,通常称为机器语言,机器语言指令是计算机惟一
能直接识别和执行的指令。
汇编语言:便于记忆和使用,通常使用汇编语言(符号指令或指令助记符)来描述计算机的指令系统。
指令:让计算机完成某种操作的命令称为指令。
指令系统:一台计算机所能识别、执行的指令的集合就是它的指令系统。
总线:连接计算机系统中其他主要功能部件的桥梁,是计算机系统中信息输送的枢纽,只有通过总线,
计算机系统的各部件才能实现相互通信。
内部总线:微处理器内部各个器件之间传送信息的通路。
系统总线:微处理机机箱内的底板总线。可分为:ISA、EISA、VESA局部总线、PCI局部总线等。
时钟周期:CPU时钟频率的倒数称为时钟周期,也称T状态。
总线周期:BIU完成一次访问存储器或I/O端口操作所需要的时间称为总线周期。一个基本的总线周
期是由4个(或4个以上)时钟周期组成的。
指令周期:执行一条指令所需要的时间称为指令周期,不同指令的指令周期的长短是不同的。一个指
令周期是由几个总线周期组成的。
21.要完成下列运算和控制,用什么标志判别?其值是什么?
(1)比较两数是否相等?
(2)两数运算后结果是正数还是负数?
(3)两数相加后是否溢出?
(4)奇偶校验判断。
(5)两数相减后比较大小。
(6)中断信号能否允许?
答:
(1)比较两数是否相等:两数相减后用零标志ZF判断,ZF=1,则相等。
(2)两数运算后结果是正数还是负数:用符号标志SF判断,SF=1,则结果为负数。
(3)两数相加后是否溢出:用溢出标志OF判断,OF=1,则有溢出。
(4)奇偶校验判断:采用偶校验方式,判定是否要补“1”?用奇偶标志PF判断,若数据结果低8位中
含有偶数个“1”,则PF=1;不用补“1”。
(5)两数相减后比较大小:ZF=1,两数相等。对于无符号数,CF=1,则被减数小于减数;CF=0,则被
减数大于减数;ZF=1,则两数相等。对于带符号数,SF⊕OF=1,则被减数小于减数;SF⊕OF=0,则被减数
大于减数。
(6)中断信号能否允许:用中断允许标志IF判断,IF=1,则能允许可屏蔽中断。
22.说明8086系统中“最小模式”和“最大模式”两种工作方式的主要区别。
最小模式(最小工作方式):单微处理器系统(系统中只有一个8086微处理器),所有的总线控制信
号,都是直接由8086CPU产生的,适用于规模较小的微机应用系统。
当把8086的33脚MN/MX接+5V时,8086CPU就处于最小工作方式。
最大模式(最大工作方式):多微处理器系统(包含有两个或多个微处理器,一个主处理器8086CPU,
其他的处理器称为协处理器它们是协助主处理器工作的。),主要用在中等或大规模的8086系统中。
当把8086的33脚MN/MX接地时,8086CPU就处于最大模式。
第3章作业
1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。
源目的
(1)MOVAX,2048H立即寻址寄存器寻址
(2)MOVCL,0FFH立即寻址寄存器寻址
(3)MOVBX,[SI]寄存器间接寻址寄存器寻址
(4)MOV5[BX],BL寄存器寻址寄存器相对寻址
-可编辑修改-
______________________________________________________________________________________________________________
(5)MOV[BP+100H],AX寄存器寻址寄存器相对寻址
(6)MOV[BX+DI],‘$’立即寻址基址变址寻址
(7)MOVDX,ES:[BX+SI]基址变址寻址寄存器寻址
(8)MOVVAL[BP+DI],DX寄存器寻址相对基址加变址寻址
(9)INAL,05HI/O端口寻址(或直接寻址)寄存器寻址
(10)MOVDS,AX寄存器寻址寄存器寻址
2.已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H单元的内容分别为10H,2AH,3CH,46H,59H,
6BH。下列每条指令执行完后AX寄存器的内容各是什么?
AX内容
(1)MOVAX,0200H;(AX)=0200H
(2)MOVAX,[200H];(AX)=2A10H
(3)MOVAX,BX;(AX)=0200H
(4)MOVAX,3[BX];(AX)=5946H
(5)MOVAX,[BX+SI];(AX)=463CH
(6)MOVAX,2[BX+SI];(AX)=6B59H
6.指出下列指令中哪些是错误的,错在什么地方
(1)MOVDL,AX错误,源和目的操作数类型不匹配,DL是8位寄存器,AX是16位寄存
器。
(2)MOV8650H,AX错误,立即数不能作为目的操作数。
(3)MOVDS,0200H错误,不能用立即数直接给段寄存器赋值。
(4)MOV[BX],[1200H]错误,不能在两个存储单元之间直接传送数据
(5)MOVIP,0FFH错误,IP不能作目的操作数或不能用立即数直接给IP寄存器赋值。
(6)MOV[BX+SI+3],IP错误,IP不能作源操作数。
(7)MOVAX,[BX][BP]错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,
不能两个同时为基址寄存器(BX、BP均为基址寄存器)。
(8)MOVAL,ES:[BP]正确。
(9)MOVDL,[SI][DI]错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,
不能两个同时为变址寄存器(SI、DI均为变址寄存器)。
(10)MOVAX,OFFSET0A20H错误,OFFSET后必须是存储单元标号地址,不能是立即数。
(11)MOVAL,OFFSETTABLE错误,操作数类型不匹配,AL为8位,TABLE为16位。
(12)XCHGAL,50H错误,交换指令XCHG的操作数不能是立即数。
(13)INBL,05H错误,IN指令的目的操作数必须是累加器
(14)OUTAL,0FFEH错误,OUT指令的源操作数必须是累加器,目的操作数为8位I/O端口
地址或用DX做桥梁的16位I/O端口地址。
10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF
等于什么?
(1)ANDAH,CL(AH)=04HCF=0
(2)ORBL,30H(BL)=36HCF=0
(3)NOTAX(AX)=0DAF7HCF不变(不影响CF)
(4)XORCX,0FFF0H(CX)=0FFF4HCF=0
(5)TESTDH,0FH(DH)=18HCF=0
(6)CMPCX,00H(CX)=0004HCF=0
(7)SHRDX,CL(DX)=0186HCF=0
(8)SARAL,1(AL)=04HCF=0
-可编辑修改-
______________________________________________________________________________________________________________
(9)SHLBH,CL(BH)=0F0HCF=0
(10)SALAX,1(AX)=4A10HCF=0
(11)RCLBX,1CF=1,(BX)=1E6DH,CF=0,(BX)=1E6CHCF=0
(12)RORDX,CL(DX)=4186HCF=0
11.假设数据定义如下:
DATASEGMENT
STRINGDB‘ThePersonalComputer&TV’
DATAENDS
试用字符串操作指令编程完成以下功能:
(1)把该字符串传送到附加段中偏移地址为GET_CHAR开始的内存单元中。
解:程序段如下:
LEASI,STRING;置源串偏移地址
LEADI,GET_CHAR;置目的串偏移地址
MOVCX,26;置串长度
CLD;方向标志复位
REPMOVSB;字符串传送
12.编程将AX寄存器中的内容以相反的次序传送到DX寄存器中,并要求AX中的内容不被破坏,然后统
计DX寄存器中1的个数是多少。
解:将AX的内容用ROR循环右移,16次之后AX的内容不变(如果用算术/逻辑右移SHL/SAL,则AX的内
容破坏,需要用堆栈PUSHUAX/POPAX保护),其最低位移入CF中,再使用RCL循环左移将CF中的值移入
DX中。并且,如果CF的值为1,则将BL加1。
MOVCX,16
XORBL,BL
LP1:RORAX,1
JNCLP2
INCBL
LP2:RCLDX,1
LOOPLP1
HLT
调试程序:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
BUFDW12
BUF1DW100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVAX,1234H
-可编辑修改-
______________________________________________________________________________________________________________
MOVCX,16
XORBL,BL
LP1:RORAX,1
JNCLP2
INCBL
LP2:RCLDX,1
LOOPLP1
HLT
CODEENDS
ENDSTART
15.某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:给每人加5
分,结果存到NEW数组中.
解:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
ARRAYDB7DUP(?)
NEWDB7DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:MOVCX,7
MOVBX,0
LP1:MOVAL,ARRAY[BX]
ADDAL,05H
DAA
MOVNEW[BXI],AL
INCBX
LOOPLP1
HLT
CODEENDS
ENDSTART
调试程序:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
ARRAYDB65H,76H,78H,54H,90H,85H,68H
NEWDB7DUP(?)
BUF1DW100DUP(?)
DATAENDS
CODESEGMENT
-可编辑修改-
______________________________________________________________________________________________________________
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVCX,7
MOVBX,0
LP1:MOVAL,ARRAY[BX]
ADDAL,05H
DAA
MOVNEW[BXI],AL
INCBX
LOOPLP1
HLT
CODEENDS
ENDSTART
某班有七个同学的英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:
(1)给每人加5分,结果存到NEW数组中
(2)把总分存到SUM单元中
(3)把平均分存到AVERAGE单元中
解:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
ARRAYDB7DUP(?)
NEWDB7DUP(?)
SUMDW0
AVGDB0
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:MOVCX,7
MOVSI,0
MOVSUM,0
MOVAH,0
LP1:MOVAL,ARRAY[SI]
ADDAL,05H
DAA
MOVNEW[SI],AL
ADDAL,SUM
DAA
MOVSUM,AL
-可编辑修改-
______________________________________________________________________________________________________________
ADCAH,0
DAA
MOVSUM+1,AH
INCSI
LOOPLP1
MOVAX,SUM
MOVBL,07H
DIVBL
MOVAVG,AL
HLT
CODEENDS
ENDSTART
调试程序:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
ARRAYDB65H,76H,78H,54H,90H,85H,68H
NEWDB7DUP(?)
SUMDB00H,00H
AVGDB0
BUF1DW100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVCX,7
MOVSI,0
MOVSUM,0
MOVAH,0
LP1:MOVAL,ARRAY[SI]
ADDAL,05H
DAA
MOVNEW[SI],AL
ADDAL,SUM
DAA
MOVSUM,AL
ADCAH,0
MOVSUM+1,AH
INCSI
LOOPLP1
MOVAL,SUM
-可编辑修改-
______________________________________________________________________________________________________________
MOVAH,SUM+1
MOVBL,07H
DIVBL
MOVAVG,AL
HLT
CODEENDS
ENDSTART
13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,
(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:0278H,PROG_F标号的地址为3400:0ABCH。
说明下列每条指令执行完后,程序分别转移到何处执行?
JMP指令
(1)JMPPROG_N
段内直接近转移,目的地址为1200H:0278H(或12278H)
(2)JMPBX
段内寄存器间接转移,目的地址为1200H:0300H(或12300H)
(3)JMP[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H→IP
段内存储器间接转移,目的地址为1200H:4800H(或16800H)
(4)JMPFARPROG_F
段间直接转移,目的地址为3400H:0ABCH(或34ABCH)
(5)JMPDWORDPTR[BX]
物理地址=DS×10H+BX=2000H×10H+0300H=20300H
(20300H)=4800H→IP,(20302H)=00FFH→CS
段间存储器间接转移,目的地址为00FFH:4800H(或057F0H)
JMP改为CALL后,目的地址与JMP相同。
(1)CALLPROG_N
段内直接调用,3字节指令,目的地址为1200H:0278H(或12278H),0103H入栈,SP=03FEH
(2)CALLBX
段内寄存器间接调用,2字节指令,目的地址为1200H:0300H(或12300H),0102H入栈,SP=03FEH
(3)CALL[BX]
段内存储器间接调用,2字节指令,目的地址为1200H:4800H(或16800H),0102H入栈,SP=03FEH
(4)CALLFARPROG_F
段间直接调用,5字节指令,目的地址为3400H:0ABCH(或34ABCH),1200H和0105H分别入栈,SP=03FCH
(5)CALLDWORDPTR[BX]
段间间接调用,2字节指令,目的地址为00FFH:4800H(或057F0H),1200H和0102H分别入栈,SP=03FCH
部分调试程序:
STACKSEGMENTSTACK
DB100DUP(?)
-可编辑修改-
______________________________________________________________________________________________________________
STACKENDS
DATASEGMENT
BUFDW12
BUF1DW100DUP(?)
ORG300H
DB00H,48H,0FFH,00H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVBX,0300H
CALLPROG_N
CALLBX
CALL[BX]
ORG0278
PROG_N:RET
ORG0300H
RET
ORG4800H
RET
HLT
CODEENDS
ENDSTART
14.如在下列程序段的括号中分别填入以下指令:
(1)LOOPNEXT
(2)LOOPENEXT
(3)LOOPNENEXT
试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX寄存器的内容分别是什么
START:MOVAX,01H
MOVBX,02H
MOVDX,03H
MOVCX,04H
NEXT:INCAX
ADDBX,AX~
SHRDX,1
()
解:
LOOP过程:AXBXCXDX
初始值01H02H04H03H
循环1次02H04H03H01H
循环2次03H07H02H00H
-可编辑修改-
______________________________________________________________________________________________________________
循环3次04H0BH01H00H
循环4次05H10H00H00H
结果:
AXBXCXDX
(1)05H10H00H00H
(2)02H04H03H01H
执行一次,ZF=0,退出循环。
(3)03H07H02H00H
执行两次,ZF=1,退出循环。
20.设8086CPU的时钟频率为5MHz,请编写延时5ms的子程序。
解:微机的主频率为5MHz
则:时钟周期=主频率的倒数=1/(5×10-6)=0.2µs
延时5ms需要的时钟周期数=5ms/0.2µs=25000
延时子程序如下:
DELAY5:MOVCX,N4
DLY1:NOP3×N
LOOPDLY117×(N-1)+5
RET16
应该有25000=4+3×N+17×(N-1)+5+16,才能实现要求的延时。则:
N=1250=04E2H
延时子程为:
DELAY5:MOVCX,04E2H
DLY1:NOP
LOOPDLY1
RET
第4章作业
P153
5.阅读下列程序,说明每条指令执行后的结果是什么?
X1DB65H,78H
X2DW06FFH,5200H
X3DD?
GO:MOVAL,TYPEX1
MOVBL,TYPEX2
MOVCL,TYPEX3
MOVAH,TYPEGO
MOVBH,SIZEX2
MOVCH,LENGTHX3
解:
(1)前三条语句的功能是设置数据于数据段中,从数据段偏移地址0000H开始存放。
变量偏移地址数据
X10000H65H
-可编辑修改-
______________________________________________________________________________________________________________
0001H78H
X20002HFFH
0003H06H
0004H78H
0005H00H
X30006H随机数
0007H随机数
0008H随机数
0009H随机数
程序汇编后结果如下:
六条程序执行结果如下:
(AL)=01H;设置变量类型属性,字节数
(BL)=02H;设置变量类型属性,字节数
(CL)=04H;设置变量类型属性,字节数
(AH)=0FFH;设置GO显示类型,近标号,为-1,补码表示
(BH)=02H;设置数据类型,无DUP时,返回数据类型的字节数
(CH)=01H;无DUP时,返回1。
程序执行后结果如下:
调试程序如下:
STACKSEGMENTSTACK
DB100DUP(?)
-可编辑修改-
______________________________________________________________________________________________________________
STACKENDS
DATASEGMENT
X1DB65H,78H
X2DW06FFH,5200H
X3DD?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
GO:MOVAL,TYPEX1
MOVBL,TYPEX2
MOVCL,TYPEX3
MOVAH,TYPEGO
MOVBH,SIZEX2
MOVCH,LENGTHX3
POPDS
HLT
CODEENDS
ENDSTART
6.画出示意图,说明下列变量在内存中如何让存放?
A1DB12H,34H
A2DB‘Right.’
A3DW5678H
A4DB3DUP(?)
(1)设置数据于数据段中,从数据段偏移地址0000H开始存放。
变量偏移地址数据
A10000H12H
0001H34H
A20002H52H
0003H69H
0004H67H
0005H68H
0006H74H
0007H2EH
A30008H78H
0009H56H
A4000AH随机数
000BH随机数
000CH随机数
调试程序如下:
-可编辑修改-
______________________________________________________________________________________________________________
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
A1DB12H,34H
A2DB'Right.'
A3DW5678H
A4DB3DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
POPDS
HLT
CODEENDS
ENDSTART
程序汇编后结果如下:
12.编程实现,从键盘输入一个十进制数0~9,查表求键入数字的七段代码(共阳极LED显示器的段码),
存入DL中,并在键入数字之前,显示提示信息“Pleaseinputanumber(0~9):”。
解:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
TABLEDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
BUFDB'Pleaseinputonenumber(0~9):',0DH,0AH,'$'
DATAENDS
CODESEGMENT
-可编辑修改-
______________________________________________________________________________________________________________
ASSUMECS:CODE,DS:DATA,SS:STACK,ES:DATA
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,09H
INT21H
MOVAH,1
INT21H
ANDAL,0FH
MOVBX,OFFSETTABLE
XLAT
MOVDL,AL
POPDS
HLT
CODEENDS
ENDSTART
调试结果:
数字5的共阳极LED七段码为92H。
15.已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。编程找出其中的最小值存入
MIN单元中,并将这个数显示在屏幕上。
解:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
BUFDB58H,75H,36H,42H,89H
MINDB0
-可编辑修改-
______________________________________________________________________________________________________________
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVCX,4
MOVBX,OFFSETBUF
MOVAL,[BX]
ST1:INCBX
CMPAL,[BX]
JBENEXT
MOVAL,[BX]
NEXT:LOOPST1
MOVMIN,AL
ANDAL,0F0H
MOVCL,4
RORAL,CL
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVAL,MIN
ANDAL,0FH
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
18.某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程先从高到低的次序排列好,
再求出总分和平均值,分别存放在SUM和AVER开始的单元中。
解:
STACKENDS
DATASEGMENT
LISTDB65H,76H,78H,54H,90H,85H,68H,66H,77H,88H
DB99H,89H,79H,69H,75H,85H,63H,73H,83H,93H
SUMDW0
-可编辑修改-
______________________________________________________________________________________________________________
AVERDB0
BUFDB100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDI,OFFSETLIST
MOVBX,19
LP0:MOVSI,DI
MOVCX,BX
LP1:MOVAL,[SI]
INCSI
CMPAL,[SI]
JNCLP2
MOVDL,[SI]
MOV[SI-1],DL
MOV[SI],AL
LP2:LOOPLP1
DECBX
JNZLP0
LP3:MOVCX,20
MOVBX,OFFSETLIST
MOVSUM,0
XORAX,AX
LP4:ADDAL,[BX]
DAA
ADCAH,0
INCBX
LOOPLP4
MOVSUM,AX
MOVBL,20H
DIVBL
ADDAL,0
DAA
MOVAVERAL
POPDS
HLT
CODEENDS
ENDSTART
20.编程将存放在AL中的无符号二进制数,转化成十六进制数,再转换成ASII码并显示在屏幕上。
-可编辑修改-
______________________________________________________________________________________________________________
解:
程序如下:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
DB100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVDH,AL
MOVCH,02H
ST1:MOVCL,4
RORDH,CL
MOVAL,DH
ANDAL,0FH
ADDAL,30H
CMPAL,39H
JBEDISP
ADDAL,07H
DISP:MOVDL,AL
MOVAH,02H
INT21H
DECCH
JNZST1
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
调试程序如下:
STACKSEGMENTSTACK
BUFDB01111000B
DB100DUP(?)
STACKENDS
DATASEGMENT
DB100DUP(?)
DATAENDS
CODESEGMENT
-可编辑修改-
______________________________________________________________________________________________________________
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVAL,BUF
MOVDH,AL
MOVCH,02H
ST1:MOVCL,4
RORDH,CL
MOVAL,DH
ANDAL,0FH
ADDAL,30H
CMPAL,39H
JBEDISP
ADDAL,07H
DISP:MOVDL,AL
MOVAH,02H
INT21H
DECCH
JNZST1
POPDS
MOVAH,4CH
INT21H
HLT
CODEENDS
ENDSTART
21.编写程序,使用三种以上的方法,将存储器中2000H开始的地址单元中的100字节数据复制到
3000H开始的存储器地址单元中。
解:
(1)利用通用传送指令MOV
MOVSI,2000H注意这里如果是标号地址,则必须用OFFSET
MOVDI,3000H
MOVCX,100
LP1:MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLP1
HLT
MOVCX,100
MOVBX,0
LP0:MOVAL,2000[BX]
MOV3000[BX],AL
INCBX
LOOPLP0
HLT
-可编辑修改-
______________________________________________________________________________________________________________
(2)利用交换指令XCHG
MOVSI,2000H
MOVDI,3000H
MOVCX,100
LP2:MOVAL,[SI]
XCHG[DI],AL
INCSI
INCDI
LOOPLP2
HLT
(3)利用换码指令XLAT
MOVBX,2000H
MOVDI,3000H
MOVCX,100
LP3:XORAL,AL
XLAT
MOV[DI],AL
INCBX
INCDI
LOOPLP3
HLT
(4)利用堆栈实现数据传送
MOVSI,2000H
MOVDI,3000H
MOVCX,50
LP4:PUSH[SI]
POP[DI]
INCSI
INCSI
INCDI
INCDI
LOOPLP4
HLT
(5)利用串操作指令REPMOVSB
MOVSI,2000H
MOVDI,3000H
MOVCX,100
CLD;DF=0,SI、DI自动+1
REPMOVSB
HLT
调试程序:
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
DATASEGMENT
ORG2000H
DB11H,22H,33H,44H,55H.66H,77H,88H,99H
DB100DUP(?)
ORG3000H
DB100DUP(?)
DATAENDS
-可编辑修改-
______________________________________________________________________________________________________________
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
START:PUSHDS
MOVAX,DATA
MOVDS,AX
MOVSI,2000H
MOVDI,3000H
MOVCX,100
LP1:MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
LOOPLP1
POPDS
HLT
CODEENDS
ENDSTART
22.在DATA开始的4个单元中存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 售楼部团购营销策略研究报告
- 物联网政策对智慧物流行业发展的可行性分析报告2025
- 餐饮会员积分系统搭建分析方案
- 2026中国数字医疗产品医保准入路径与支付标准研究报告
- 电子商务项目可行性研究报告
- 银行小微企业信贷业务问题与对策研究报告
- 政策预算对2025年新能源汽车市场拓展可行性分析报告
- 混凝土有关课题研究报告
- 2026中国创新药市场深度分析与投资战略规划报告
- 2026转基因农作物研发领域产业技术解析及未来市场投资策略报告
- 【新教材】2026秋人教PEP版六年级上册英语全册教案(含教学计划)
- 《与妻书》同步练习-统编版高中语文必修下册
- 中国热射病诊断与治疗指南(2026版)解读
- 项目复盘总结报告撰写模板
- 客户满意度调查分析报告范本
- 长江存储在线测评题库
- 2025年UOM无人机理论培训合格证题库及答案
- 2026年河北单招语文应用文写作专项通知书信倡议书经典题
- 安徽省大联考2025-2026学年高一上学期十月调研考试英语试题(解析版)
- 《长征》读书分享演讲
- 履约能力及交货进度保证措施
评论
0/150
提交评论