微机软件实验习题与答案(完整版)
微型计算机技术课后习题一二三章答案

微计算机二三章1.已知物理地址为FFFF0H,且段内偏移量为A000H,若对应的段地址放在DS中,则DS应为(B) 。
A.5FFFHB.F5FFHC.5FFF0HD.F5FF0H2.下列CPU中属于准16位的是C 。
A.8080B.8086C.8088D.80386SX3.8088的外部数据总线为 A 位。
A.8B.16C.32D.644.8086CPU的内部结构由 D 组成。
A.ALU,EU,BIUB.ALU,BIU,地址加法器C.寄存器组,ALUD.EU,BIU5.每当8086的指令队列中有B空字节,BIU就会自动把指令取到指令队列中。
A.1个B.2个C.3个D.4个6.BIU的功能是C。
A.计算有效地址B.分析指令,产生控制信号C.与存储器或I/O端口之间进行传送,并能形成物理地址D.进行算术运算与逻辑运算7.指令队列缓冲器的作用是 D 。
A.暂存操作数地址B.暂存操作数C.暂存指令地址D.暂存预取指令8.8086的指令队列的长度是 C 字节。
A.4个B.5个C.6个D.8个9.8088的指令队列的长度是A字节。
A.4个B.5个C.6个D.8个10.下列寄存器都存在于BIU部件的是B。
A.SP、CSB.IP、DSC.BP、IPD.FR、SP11.8086 CPU内部共有 C 个16位寄存器。
A.12B.13C.14D.1612.不属于EU部分的寄存器是A 。
A.IPB.BPC.DID.SP13.8086/8088的状态标志有D个。
A.3B.4C.5D.614.8086有B个地址/数据复用引脚。
A.8B.16C.20D.3215.8088有 A 个地址/数据复用引脚。
A.8B.16C.20D.3216.8086/8088中,一个最基本的总线周期由 B 个时钟周期(T状态)组成。
A.1B.4C.2D.617.在8086/8088中,在T1状态,CPU往总线发出C信号。
A.数据B.状态C.地址D.其它18.总线周期为T1、T2、T3、T4,若要增加等待状态T W,它应插在C之后。
微机编程实验答案整理

1、可编程定时器计数器8253(一)ioport equ 0d400h-0280hio8253a equ ioport+283hio8253b equ ioport+280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253aout dx,almov dx,io8253b ;送计数初值为0FHmov al,0fhout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII码加30Hadd dl,7 ;否则为'A'-'F',ASCII码加37Hnum: add dl,30hmov ah,02h ;显示int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret ;子程序返回disp endpcode endsend start2、可编程定时器计数器(二)ioport equ 0d400h-0280hio8253a equ ioport+280hio8253b equ ioport+281hio8253c equ ioport+283hcode segmentassume cs:codestart:mov dx,io8253c ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253cmov al,76h ;设8253通道1工作方式2out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start3、加法DATA SEGMENTDATA1 DB ' ','2','6','8','5','9','$' ;' '空格用来存放最高位进位,'$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志。
微机习题+答案

微机习题+答案⼀、程序填空1、下列程序段要求在100 个带符号数中找出其中最⼤的⼀个数。
设该数据区⾸址的偏移地址=2000H,最后要求将最⼤值存⼊偏移地址=2100H的单元中,试填空完成该程序。
MOV BX,2000HMOV AX,[BX]MOV CX,100LOP1:INC BXCMP AL,[BX]JNG LOP2MOV AL,[BX]LOP2:LOOP LOP1MOV [2100H] ,AL5、求某数据区内负数的个数程序如下:(在空⽩处填⼊适当的语句)。
(1)STACK SEGMENT STACK DW 64 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV DI,3000HMOV CL,[DI]XOR CH,CHMOV BL, CHINC DIA1: MOV AL, [DI]TEST AL, 80HJE A2INC BLA2: INC DILOOP A1INT 03HCODE ENDSEND START(2)STACK SEGMENT STACKDB 20 DUP(?)STACK ENDSDA TA SEGMENTNUM DB ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START: MOV SI,2000HMOV CX,50MOV BL,00HA1: MOV AL,[SI]CMP AL,’A’;CMP AL,41HJNZ A2INC BLA2: INC SILOOP A1MOV NUM,BLINT 03HCODE ENDSEND START4、有如下程序段,DA TA SEGMENTX1 DB 0FAHX2 DB 0FCH DA TA ENDSCODE SEGMENT……MOV AL,X1ADD AL,X2……CODE ENDSEND问:ADD指令执⾏完后标志寄存器中的哪些位受到影响?标在题图中。
《微型计算机技术及应用》(第四版) 习题和答案完整版

微型计算机技术及应用(第四版)习题和答案第二章1、8088与8086的区别[解答] ①外部数据总线位数不同。
8086外部数据总线16位,在一个总线周期内可以输入/输出一个字(16位数据),而8088外部数据总线8位,在一个总线周期内只能输入/输出一个字节(8位数据)。
②指令队列缓冲器大小不同。
8086指令队列可容纳6个字节,且在每一个总线周期中从存储器取出2个字节的指令代码填入指令队列;而8088指令队列只能容纳4个字节,在一个机器周期中取出一个字节的指令代码送指令队列。
③部分引脚的功能定义有所区别。
(1) AD15-AD0的定义不同。
在8086中都定义为地址/数据分时复用引脚;而在8088中,由于只需要8条数据线,因此,对应于8086的AD15-AD8这8根引脚在8088中定义为A15-A8,它们在8088中只做地址线用。
(2) 引脚28和34的定义不同。
在最大方式下,8088的第34引脚保持高电平,在最小模式时,8088和8086的第28引脚的控制信号相反,而8086的第34引脚为BHE/S7,BHE用来区分是传送字节、还是字,8088的第34引脚为SS0,用来指出状态信息,不能复用。
(3) 引脚28的有效电平高低定义不同。
8088和8086的第28引脚的功能是相同的,但有效电平的高低定义不同。
8088的第28引脚为IO/M,当该引脚为低电平时,表明8088正在进行存储器操作;当该引脚为高电平时,表明8088正在进行I/O操作。
8086的第28引脚为M/IO,电平与8088正好相反。
2、根据8086CPU的存储器读写时序图,请说明:(1)地址信号应在哪些时间内有效?(2)读、写动作发生在什么时间内?(3)为什么读与写数据的有效时间长短不一样?(4)T1状态下数据/地址线上是什么信息?数据信息是什么时候给出?[解答] 地址信号只在T1状态时有效,并被锁存起来。
读动作发生在T3、T4状态,而写动作发生在T2、T3、T4状态。
微机课后答案6-8(共18张PPT)

6.6画出查询传送方式输 出数据的流程图
I/O
:F0000H-FFFFFH
存储器是:00000H-EFFFFH
6.8 习图6-2为一个LED接口电路,写出使8个LED管自左至右 依次发亮2s的程序,并说明该接口属于何种输入输出控制方式, 为什么?
~23H
D7
……8255A
D0
PB7 ……
MOV AL,0111 0000B;通道1,方式0,16计数,二进制计数
OUT 87H,AL
❖ L1: OUT 20H,AL
❖
CALL DELAY2S
❖
ROR AL,1
❖
LOOP L1
❖
JMP L2
MOV AL,10000000B
OUT 23H,AL
MOV AL,01111111B
L2: MOV CX,8 L1: OUT 21H,AL
CALL DELAY2S ROR AL,1 LOOP L1 JMP L2
答:07H
8.22 定时器8253输入时钟频率为1MHz,并设定为按BCD码计数,若写入的计数 初值为0080H,则该通道定时时间是多少?
答:设该通道的输出脉冲频率为X
则计数初值TC= 1MHz/ X=80 所以定时时间T=1/X=80/1MHz=80μs
8.35用一片8255A控制一组红、绿、黄灯, 如习图8-8所示,反复检测s1、s2,要求由s1、s2 的“闭合”和“断开”控制红、绿、黄3灯的点 亮。
D7-D0
RD WR A0 A1 CS
8253
+5V
GATE0 CLK0 OUT0
转换 电路
图习8-5
解:
因为最高转速为1000转/秒,因此,转1s的脉冲数最高为 1000×50=Байду номын сангаас0000个=C350H,因此计数器必须用16位计数,并且用二 进制计数。 (1)采用定时测试转速,计算方法为:
微机原理实验编程题(完整)

1)(正确)比较两个无符号数的大小(量个数放在内存S3的连续两个单元中),将大数存入MAX单元中。
DATAS SEGMENTBUF DB 1,2CNT EQU $-BUFDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV CX,CNT-1LEA BX,BUFMOV AL,[BX]L2: INC BXCMP AL,[BX]JAE L1MOV AL,[BX]L1:LOOP L2ADD AL,30H- 1 - / 16MOV DL,ALMOV AH,2INT 21HMOV AH,4CHINT 21HCODES ENDSEND STAR2)(正确)试编一程序,求三个带符号数据中的最大值,并将最大值存入MAX单元中,设三个带符号数分别在三个变量X,Y,Z中存储。
DATAS SEGMENTX DB 5Y DB-2Z DB 0MAX DB?DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AL,XMOV BL,YCMP AL,BLJG L1MOV AL,BLL1:MOV BL,ZCMP AL,BLL2: MOV MAX,ALMOV AH,4CHINT 21HCODES ENDSEND START3)(正确)根据MODE单元中编号0-7分别转向L0-L7标号处,执行L0-L7处分别完成显示‘0-7’字符,即当MODE=0时,转向L0标号,完成显示‘0’,当MODE=7时,转向L7标号,完成显示‘7’。
DATAS SEGMENTMODE DB 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:- 3 - / 16MOV AX,DATASMOV DS,AXMOV AL,MODECMP AL,0JZ L0CMP AL,1JZ L1CMP AL,2JZ L2CMP AL,3JZ L3CMP AL,4JZ L4CMP AL,5JZ L5CMP AL,6JZ L6MOV DL,'7'MOV AH,02HINT 21HJMP L8L0:MOV DL,'0'MOV AH,02HINT 21HJMP L8L1:MOV DL,'1'MOV AH,02HINT 21HJMP L8L2:MOV DL,'2'MOV AH,02HINT 21HJMP L8L3:MOV DL,'3'MOV AH,02HINT 21HJMP L8L4:MOV DL,'4'- 5 - / 16MOV AH,02HINT 21HJMP L8L5:MOV DL,'5'MOV AH,02HINT 21HJMP L8L6:MOV DL,'6'MOV AH,02HINT 21HJMP L8L8:MOV AH,4CHINT 21HCODES ENDSEND START4)(正确)根据输入值(0-4)的不同,执行不同的操作,用转移标法编写程序。
微机原理习题答案(完整版)
第一章习题答案1-1 请说明CPU的功能以及CPU是如何执行指令和程序的。
答:CPU的功能是执行程序和统筹处理计算机系统中各类事务。
CPU执行指令分为3步:取指令、分析指令、执行指令;计算机程序是由一条条指令按一定的顺序排列组成的,CPU执行程序的过程就是一条条指令累计执行的过程,其方式分为串行作业方式和流水线作业方式。
1-2 请说明单片机内部主要是由哪些部件组成的,并说明各部件的作用。
答:CPU:由控制器和运算器构成,控制器的作用是执行指令和协调系统各部件的工作;运算器的作用是进行逻辑运算和算术运算。
存储器:存储计算机工作时使用的信息,即指令代码和数据代码。
I/O接口电路:具有数据缓冲、数据隔离及数据转换的功能。
1-3 请问对于容量位8K的存储器芯片,它的地址线是多少根?答:8K=8192=213,故地址线为13根。
另附:存储器的数据线由存储器的字长决定,例如一块32K×16(存储器容量显示格式:存储单元数×存储单元的字长)的存储器,其地址线为15根,数据线为16根。
1-4 将十进制数78,134,分别用二进制数、十六进制数和8421BCD吗表示。
答:(78)D=(1001110)B=(4E)H=(01111000)8421BCD(134)D=(10000110)B=(86)H=(000100110100)8421BCD注:8421BCD码为4位表示一个十进制数符,本质是符号不是数值,所以不可省略0。
1-5 将下列真值分别转化为用8位和16位二进制数表示的原码、补码和反码。
X=1000100;[X]8位原=[X]8位反=[X]8位补=01000100;[X]16位原=[X]16位反=[X]16位补=0000000001000100X= -1000100[X]8位原=11000100,[X]8位反=10111011,[X]8位补=10111100;[X]16位原=1000000001000100,[X]16位反=1111111110111011,[X]16位补=1111111110111100;X= -0111111[X]8位原=10111111,[X]8位反=11000000,[X]8位补=11000001;[X]16位原=1000000000111111,[X]16位反=1111111111000000,[X]16位补=1111111111000001;1-6 将下列补码转化成二进制数的真值。
东华大学微机实验报告答案(软件)
目录实验一DEBUG的启动及其基本命令的使用实验二内存操作数及寻址方法实验三汇编语言程序的调试与运行实验四查表程序设计实验五系统功能调用实验六分支程序设计实验七循环程序设计实验八子程序设计实验九综合程序设计实验心得体会参考文献实验一 DEBUG的启动及其基本命令的使用源程序:(指导书中给出)DA TA SEGMENTSTRING1 DB 'Move the cursor backward'STRING2 DB 'Move the cursor backward'MESS1 DB 'Match.',13,10,'$'MESS2 DB 'No Match.',13,10,'$'DA TA ENDSSTACK SEGMENT STACKDB 40 DUP (?)STACK ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DA TA,ES:DA TA,SS:STACKMAIN PROC FARSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,STRING1LEA DI,STRING2CLDMOV CX,25REPZ CMPSBJZ MA TCHLEA DX,MESS2JMP SHORT DISPMATCH: LEA DX,MESS1DISP: MOV AH,09hINT 21HRETMAIN ENDPPROGNAM ENDSEND START运行结果:用DEBUG调试将输出字符串改为‘No Match’用E指令修改“backward”为“forward”再次用d命令查看修改结果。
用g命令运行程序实验二内存操作数及寻址方法1、(1)程序说明:设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。
微机实验参考(有答案)
1.题目:编程将(AX)=2387、(BX)=192FH、(CX)=9256中的无符号数按由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。
;======================; 参考答案:;--------------------------------------CODE SEGMENTASSUME CS:CODESTART:MOV AX,2387MOV BX,192FHMOV CX,9256CMP AX,BXJAE NEXT1XCHG AX,BXNEXT1:CMP AX,CXJAE NEXT2XCHG AX,CXNEXT2:CMP BX,CXJAE NEXT3XCHG BX,CXNEXT3:MOV AH,4CHINT 21HCODE ENDSEND START;======================2.题目:编程将(BX)=8600H、(CX)=3489H、(DX)=9235按有符号数由大到小排序,上机编程调试出程序,并将程序及排序结果记录在下面。
;======================; 参考答案:;--------------------------------------CODE SEGMENTASSUME CS:CODESTART:MOV BX,8600hMOV CX,3489HMOV DX,9235CMP BX,CXJGE NEXT1XCHG BX,CXNEXT1:CMP BX,DXJGE NEXT2XCHG BX,DXNEXT2:CMP CX,DXJGE NEXT3XCHG CX,DXNEXT3:MOV AH,4CHINT 21HCODE ENDSEND START;======================3.题目:在数据段中定义如下数据:32,34,89H,,编程将以上数据按有符号数进行排序,并将程序和结果记录下来。
;======================; 参考答案:;--------------------------------------DATA SEGMENTNUM DB 32,34,89HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX ;初始化DSLEA BX,NUM ;取有效地址到BX,以便访问要排序的数MOV AL,[BX]CMP AL,[BX+1]JGE NEXT1 ;若第一个数大则跳转,否则将第一个与第二个数交换XCHG AL,[BX+1]MOV [BX],ALNEXT1:CMP AL,[BX+2]JGE NEXT2;若第一个数大则跳转,否则将第一个与第三个数交换XCHG AL,[BX+2]MOV [BX],ALNEXT2:MOV AL,[BX+1];将第二个和第三个数比较CMP AL,[BX+2]JGE NEXT3;若第二个数大则跳转,否则将第二个与第三个数交换XCHG AL,[BX+2]MOV [BX+1],ALNEXT3:MOV AH,4CHINT 21HCODE ENDSEND START;======================4.题目:在数据段中定义如下数据:99,25,86,编程将以上数据按无符号数进行排序,上机调试出程序,并将程序和结果记录下来。
微机原理及应用实验教程参考答案
DATA SEGMENT
DW 6666H, 7777H, 8888H, 9999H, 0AAAAH, 0BBBBH, 0CCCCH, 0DDDDH, 0EEEEH, 0FFFFH
3) 用W命令将程序写入到一个指定的地方或由计算机选择转载地址。
例:-W xxxx:xxxx 或-W
(3)用Q命令退出DEBUG。
(4)用DEBUG 路径\文件名.COM 的方式,将刚才保存的文件重新装入到内存。
(5)用U命令,查看程序转载的地址。
(6)用G命令运行程序。
例:-G=xxxx:xxxx 从程序转载处的地址开始运行
2、求某数据区内负数的个数。
设数据区的第一个单元存放数据的个数,从第二个单元开始存放数据,在最后一个单元存放结果。
参考程序一如下:
STACK SEGMENT STACK
DB 32 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX, 0001H
MOV BL, 02H
A1: MOV AL, BL
INC BL
MUL BL
ADD DX, AX
CMP AX, 00C8H
JNA A1
INT 03H
CODE ENDS
END START
参考程序二、(数据段内的数据可根据需要改变)
STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
(2)用MASM.EXE编译源程序,编译无错后,生成相应的OBJ目标文件。
(3)用LINK. EXE 连接OBJ文件,生成可执行的EXE文件。
(4)运行程序:根据需要,可选择直接通过文件名的方式运行程序,或者是用DEBUG将可执行的EXE文件跳入内存后,用G命令运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理软件实验实验1 两个多位十进制数相加的实验实验内容:将两个多位十进制数相加,要求加数和被加数均以ASCII码形式各自顺序存放以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'input the first number:','$'STRING2 DB 13,10,'input the second number:','$'STRING3 DB 13,10,'the output is:','$'DATA1 DB 6 DUP(00H),'$'DATA2 DB 6 DUP(00H),'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA SI,DATA1LEA DI,DATA2L0:LEA DX,STRING1;打印字符串STRING1MOV AH,09INT 21HINPUT1: ;输入第一个数MOV AH,01;输入字符至AL中INT 21HCMP AL,'/'JE L1MOV [SI],ALINC SIJMP INPUT1L1:LEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,'/'JE L2MOV [DI],ALINC DIJMP INPUT2L2:MOV SI,0CLC;清空进位标志位CFMOV CX,6PLUSE: ;相加;SUB DATA1[SI],30H;SUB DATA2[SI],30H;这里不能使用这两条指令,因为如果DATA1[5]=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1[SI]ADC AL,DATA2[SI]AAA;加法调整指令,可使两个ASCII数直接相加MOV DATA1[SI],AL;和赋给DATA1[SI]INC SILOOP PLUSEL3:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1[SI],00HJE SHOWSHOW2:MOV DL,DATA1[SI]ADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入1234和99999相加实际上是4321和99999相加(即:4321+99999=104320)实验2 两个数相乘的实验(无符号数相乘)实验内容:实现十进制数的乘法。
要求被乘数和乘数均以ASCII码形式各自顺序存放在内存中,乘积在屏幕上显示出来。
完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'the output is:','$'DATA1 DB 31H,32H,33HDATA2 DB 35H,36HDATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV DL,10MOV AL,DATA1[0];AL=31HSUB AL,30H ;AL=01HMUL DL;乘10 ;AL=10ADD AL,DATA1[1];AL=10 +32HSUB AL,30H ;AL=10 +32H-30H=12MUL DL ;AL=120ADD AL,DATA1[2];AL=120+33HSUB AL,30H ;AL=120+33H-30H=123MOV BL,AL ;BL=AL;MOV AL,DATA2[0];AL=35HSUB AL,30H ;AL=5MUL DL;乘10 ;AL=50ADD AL,DATA2[1];AL=50+36HSUB AL,30H ;AL=50+36H-30H=56MUL BL ;AX=123x56=6888SUB DX,DX;DX清零MOV BX,1000DIV BX;(DX,AX)/1000,商6在AX中,余数888在DX中PUSH DXMOV DL,ALADD DL,30HMOV AH,02 ;打印最高位6INT 21HPOP DXMOV AX,DX;888赋给AXDIV BL;AX/100,商放在AL中,余数88放在AH中MOV DL,ALMOV CL,AH ;!!!这里千万不能把AH直接赋给AL,因为经过INT 21H 指令后AL,AH会改变ADD DL,30HMOV AH,02;打印第二位INT 21HMOV BL,10MOV AL,CLSUB AH,AH;清空AHDIV BL;AX/10,商放在AL中,余数8放在AH中MOV DL,ALMOV CL,AHADD DL,30HMOV AH,02;打印第三位INT 21HADD DL,30HMOV AH,02;打印第四位INT 21HCODES ENDSEND START运行结果为:实验3 字符串匹配实验实验内容:编写程序实现两个字符串比较。
如果相同,则屏幕显示“match”,否则屏幕显示”nomatch”,完整代码如下:DATAS SEGMENT;此处输入数据段代码PRINT1 DB'input the first string:','$'PRINT2 DB 13,10,'input the second string:','$'PRINT3 DB'match','$'PRINT4 DB'nomatch','$'PRINT5 DB 13,10,'output: ','$'STRING1 DB 30 DUP(00H),13,10,'$'STRING2 DB 30 DUP(00H),13,10,'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA DX,PRINT1;打印字符串PRINT1MOV AH,09INT 21HLEA SI,STRING1;STRING1地址赋给SILEA DI,STRING2;STRING2地址赋给DIINPUT1:MOV AH,01;输入字符至ALINT 21HCMP AL,'/';输入字符串以‘/’结束,转L0JE L0MOV [SI],ALINC SIJMP INPUT1L0:LEA DX,PRINT2;打印字符串PRINT2MOV AH,09INT 21HINPUT2:MOV AH,01; 输入字符至ALINT 21HCMP AL,'/'JE L1MOV [DI],ALINC DIJMP INPUT2L1: MOV CX,30 ;CX=30代表比较30次MOV SI,00HCOMPARE:;字符串一个一个比较MOV AL,STRING1[SI];取STRING1存储单位中的第SI个字符赋给AL CMP AL,STRING2[SI];AL与STRING2存储单位中的第SI个字符比较JNE NOMATCHINC SILOOP COMPAREJMP MATCHNOMATCH:;打印output:nomatch LEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT4MOV AH,09INT 21HJMP L2MATCH:;打印output:matchLEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT3MOV AH,09INT 21HL2: MOV AH,4CHINT 21HCODES ENDSEND START 运行结果:实验4 从键盘输入数据并显示的实验实验内容:将键盘输入的2位十六进制数转换为等值的二进制数,并在屏幕上显示。
列如:键入f2,则显示11110010.完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB'please input a string:','$'STRING2 DB 13,10,'the output is:','$'STRING3 DB 13,10,'input error',13,10,'$'DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码L0: LEA DX,STRING1;打印字符串STRING1 MOV AH,09INT 21HMOV AH,01;输入第一个字符至AL中INT 21HCMP AL,'0'JB ERROR1CMP AL,'9'JBE ENTER1CMP AL,'A'JB ERROR1CMP AL,'F'JBE ENTER1CMP AL,'a'JB ERROR1CMP AL,'f'JBE ENTER1ERROR1:LEA DX,STRING3;打印字符串STRING3MOV AH,09INT 21HJMP L0ENTER1:CALL ASC2BCD;把ASCII码转化成十进制数BCD码MOV CL,4ROL AL,CLMOV BL,AL;把高四位放到BL寄存器中;输入第二个字符MOV AH,01;输入第二个字符至AL中INT 21HCMP AL,'0'JB ERROR1CMP AL,'9'JBE ENTER2CMP AL,'A'JB ERROR1CMP AL,'F'JBE ENTER2CMP AL,'a'JB ERROR1CMP AL,'f'JBE ENTER2ENTER2:CALL ASC2BCD;把ASCII码转化成十进制数BCD码ADD BL,ALLEA DX,STRING2;打印字符串STRING2MOV AH,09INT 21HMOV CX,9CLC;清空标志位SHOW: ;显示BL中的二进制数DEC CXCMP CX,0JE NEXT ;输出完八位乊后返回DOSROL BL,1 ;循环左移一位,若溢出为1,则CF=1 JC M1JMP M2M1: MOV DL,'1';若CF=1,转至M1打印‘1’MOV AH,02INT 21HJMP SHOWM2: MOV DL,'0';若CF=0,转至M1打印‘0’MOV AH,02INT 21HJMP SHOWNEXT:MOV AH,4CHINT 21HASC2BCD PROCCMP AL,'9'JBE L1 ;若AL≤9,转L1SUB AL,07H ;若输入的数为A~F,或者a~f,则减7,A接在39H后面,A~F=3AH~3FH,a~f=5AH~5FHL1: SUB AL,30H ;减30HAND AL,0FH ;滤除高位,保留低位,因为a~f恰好比A~F大20H,这样a~f就和A~F的数值一样了RETASC2BCD ENDPCODES ENDSEND START输出结果为:(若输出不在0~9,A~F,a~f内,则重新输入)实验5 字符和数据计算的实验实验内容:先在屏幕上显示“input string,”,输入字符串; 再显示“result=”。