微型计算机原理与应用实验指导书上海大学通信学院2010 年4 月PC微机原理实验一一、目的:掌握PC机DEBUG调试程序有关命令的操作及8086各类指令的功能。
要求:在PC机上完成下列程序的调试运行,并写出运行结果。
二、1.DEBUG的基本操作:(详细内容请参阅教材“程序的调试,P173”和“附录F调试程序DEUBG的使用,P499”)(1)从WINDOWS进入DOS之后,输入命令启动DEBUG:C:>DEBUG 回车(2)输入R命令,查看和记录CPU各个寄存器的内容:-R回车看到什么(3)输入A命令,汇编下面的字符“WINDOWS”显示程序:-A100 ;从偏移地址是0100H处开始写指令MOV AH,2MOV DL, 57 ;57H 是“W ”的ASCII码INT 21 ;INT 21是DOS 功能调用,AH=2代表2号功能;这3句合起来的功能是:显示DL中的字符MOV DL, 49INT 2 1MOV DL, 4EINT 21MOV DL, 44INT 2 1MOV DL, 4FINT 2 1MOV DL, 57INT 2 1MOV DL, 53INT 2 1INT 3 ;功能是产生一个断点,不要省略(4)输入U 命令反汇编上面的程序:-U 100问:这里100代表什么(5)输入G命令连续运行上面的程序,记录运行结果:-G=100,57,53依次分别改为574F4E57 (6)输入E命令把上面程序中的数据,49,,44,,45:,,45,4C43,4F4D,-E 103 回车(以下同)-E 10710B-E-E 10F113-E117-E11B-E(7)输入D命令查看程序机器码的存放情况:-D 100 11E ;看从100开始到11E的机器码(8)输入G命令再连续运行程序,并记录运行结果:-G=100(9)依次输入下面的T命令(单步执行)和G命令(设置断点并启动运行),记录各命令的运行结果:-T=100 回车-G=100 106 回车-G=100 10A 回车-G=100 10E 回车-G=100 11E 回车注意:下面第2—第8段程序是7个实用的小程序,若不小心打错指令,可以这样修改:例如:CS:0100 B300 MOV BL,00102 53 PUSH BX0103 B220 LP1: MOV DL,20要修改“PUSH BX”,因为这条指令的IP是0102,所以按以下操作:-A 0102 回车,然后把正确的指令打入,“-A ”是汇编指令。
如果要查看0100以后的指令及相应的机器代码,可以-U 0100 回车,能够看到CS:0100开始的指令及相应的机器代码。
“-U ”是反汇编若发现有误用,用“-A XXXX 回车”,重打这条指令即可2.编制一个能在CRT上连续显示A,B,C,D······Z大写英文字符的源程序,并在源程序下汇编调试机运行。
参考源程序(DEBUG调试环境中,源程序的十六进制数后面不写H):CS:0100 B300 MOV BL,00102 53 PUSH BX0103 B220 LP1: MOV DL,200105 B402 MOV AH,020107 CD21 INT 21BXPOP 5B 0109010A 88D8 MOV AL,BLALFEC0 010C INCCMP AL,1B3C1B 010EJNZ 0110 LP2(0114) ;不能写LP2,应写750201140112 B001MOV AL,01LP2: 88C3 MOV BL,AL01140116 53 PUSH BX ;ADD AL,40 0440 011788C2 0119 MOV DL,ALB402 MOV AH,02 011B011D CD21 21 INTMOV 011F B 9FFFF CX,FFFF DEC CXDL:0122 490123 75FD JNZ DL(0122);不能写DL,应写01220125 EBDC JMP LP1(0103);按CTRL+C,可中止程序运行。
运行正确后,改写程序为0,1,2,3,4,5,7,8,9的循环显示。
3.编制一个3字节压缩BCD加法源程序若要实现123456+456789,根据低地址放低字节,高地址放高字节原则,请用E命令在DS:1000-1002单元正确存放被加数123456,在DS:1010-1012单元正确存放加数456789。
参考程序如下:CS:0200 BE0010 MOV SI,10000203 BF1010 MOV DI,10100206 BB2010 MOV BX,10200209 B103 MOV CL,3020B B500 MOV CH,0020D F8 CLC020E8A04 MAD: MOV AL,[SI]0210 1205 ADC AL,[DI]0212 27 DAA0213 8807 MOV [BX],AL0215 46 INC SI0216 47 INC DI0217 43 INC BX0218 E2F4 LOOP MAD(020E)021A F4 HLT运行结果:[1020]=______ [1021]=______ [1022]=______ SI=______ DI=______ BX=_____相加后结果是:_________________F标志:O=______ S=______ Z=______ A=______ P=______ C=______注意:按CRT的实际显示填写。
(参考书P502)结果会如何DAA的作用,如果没有DAA思考:4.一字节十六进制数转换为ASCII码(只考虑大写字母)用E命令在DS:1000单元中存放十六进制数5A调试运行下面程序:CS:0300 8D360010 LEA SI,[1000]0304 8D3E2010 LEA DI,[1020]0308 8A04 MOV AL,[SI]030A 240F MOV BL,AL030C 240F AND AL,0F030E E80E00 CALL CHANG(031F)0311 80E30 AND BL,F00314 B90400 MOV CX,40317 D2EB SHR BL,CL0319 88D8 MOV AL,BL031B E80100 CALL CHANG(031F)031E F4 HLT031F 3C09 CHANG: CMP AL,090321 7602 JBE AD30(0325)0323 0407 ADD AL,070325 0430 AD30: ADD AL,300327 8805 MOV [DI],AL0329 47 INC DI032A C3 RET运行结果:[1020]=______ [1021]=______思考:NOP 是空操作指令,若在ADD AL,07后面,加一条NOP,结果会如何5、搜索字符串结束标志,统计搜索的字符个数用E命令在DS:1000开始的单元中存放若干个ASCII字符,如:30,31,32……39,0D。
(0D 作为字符串结束标志),调试运行下面程序CS: 0100 8D3E0010 LEA DI,[1000]0104 B200 MOV DL,00106 B00D MOV AL,0D0108 AE AGAIN: SCASB ;书P150,AL减去[DI],INC DI0109 7404 JE DONE(010F)010B FEC2 INC DL010D EBF9 JMP AGAIN(0108)010F 8D1E2010 DONE: LEA BX,[1020]0113 8817 MOV [BX],DL0115 F4 HLT运行结果:___________单元,该单元的值是___________搜索的字符个数存放在.AL=__________ BX=__________ DL=__________思考:把SCASB换成通用指令,如何改6、编制一个将N个带符号的正、负数分开的源程序。
设N=10,用E命令在DS:1000-1009单元存放10个数(1字节):01,02,03,04,06,FF,80,81,06,07将该数据块正、负数分开,正数放在1010为首地址的单元中,负数放在1020为首地址的单元中。
参考程序:CS: 0300 BE0010 MOV SI,10000303 BF1010 MOV DI,10100306 BB2010 MOV BX,10200309 B90A00 MOV CX,000A030C AC G1: LODSB ;书P150,[SI]送给AL;INC SIAL,80020D A880 TESTMINUS(0314) JNZ 030F 7503;INC DI,AL送给[DI];书P1500311 AA STOSBJMP AGAIN(0319)0312 EB05BX, DI0314 887DF MINUS: XCHGSTOSBAA 0316BX, DI87DF XCHG 0317CX49 AGAIN: DEC 0319G1(030C) JNZ 030A 75F0HLT 031C F4运行结果:[1014]=_____ [1013]=_____ [1010]=_______ [1011]=______ [1012]=______ [1022]=_____ [1021]=_____ [1015]=_______ [1016]=______ [1020]=______),程序能更简洁吗思考:二条XCHG作用是什么如果不用STOSB(功能见书P150个ASCII字符进行偶校验的源程序。
7、编制一个将N ASCII字符单元放1000—10078个设N=8,用E命令在DS:,44,42,4341 31,32,33,34,参考程序:SI,[1000] LEA CS: 0400 8D360010BX,[1010] LEA 0404 8D1E1010CX,8 MOV 0408 B90800AGAIN: LODSB 040B ACAND AL,AL 040C 20C0NEXT(0417) JPE 7A07 040EAL,80 OR 0410 0C80MOV [BX],AL 0412 8807BX INC 0414 43LP1(041A) EB03 0415 JMP[BX],ALMOV NEXT: 8807 04170419 43 INC BXDEC 041A LP1: 49 CXAGAIN(040B) 041B JNZ 75EEHLT F4 041D运行结果:1000—1007单元内容:___________________________________________1010—1017单元内容:___________________________________________改上述程序进行奇校验,写出运行结果:1000—1007单元内容:___________________________________________1010—1017单元内容:___________________________________________8、找出无序的有符号数中的最小值和最大值用E命令在DS:1000—100A中存放11个数:0A,80,84,82,83,81,01,02,05,04,03,其中0A为数列的个数。