1、微机软件实验习题与答案完整版微机原理软件实验实验1两个多位十进制数相加的实验实验内容:将两个多位十进制数相加,要求加数和被加数均以 ASCII码形式各 自顺序存放以DATA1和DATA必首的5个内存单元中(低位在前),结果送回 DATA攸t。完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB input the first number: ,$STRING2 DB 13,10,nput the second number: ,$STRING3 DB 13,10the output is: ,$DATA1 DB 6 DUP(00H),$DATA2 DB 6 DUP(
2、00H)$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: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,ALJMP INPUT1L1:LEA DX,STRING2;打印字符申 STRING2MOV AH
3、,09INT 21HINPUT2: ;输入第二个数MOV AH,01;输入字符至ALINT 21HCMP AL,/JE L2MOV DI,ALINC DIJMP INPUT2L2:MOV SI,0CLC;活空进位标志位CFPLUSE:;相加 ;SUB DATA1SI,30H;SUB DATA2SI,30H;这里不能使用这两条指令,因为如果DATA15=00H,00H-30H需要借位相减,使CF=1MOV AL,DATA1SIADC AL,DATA2SIAAA ;加法调整指令,可使两个ASCIB直接相加MOV DATA1SI,AL ;和赋给 DATA1SIINC SILOOP PLUSEL3:L
4、EA DX,STRING3;打印字符申 STRING3MOV AH,09INT 21HMOV CX,6MOV SI,6SHOW:DEC SICMP DATA1SI,00HJE SHOWSHOW2:MOV DL,DATA1SIADD DL,30HMOV AH,02INT 21HCMP SI,0JE L4DEC SIJMP SHOW2L4: MOV AH,4CHINT 21HCODES ENDSEND START运行结果如下:输入为低位在前,即输入 1234和99999相加实际上是4321和 99999 相加(即:4321+99999=1043200.g DCsOa sr *4 Zpu ipeA.
5、 WDU Wk Ffsk*InpittSe first iiiiiihr:lZ34/ input Lht?少忒烦id immber thf? nutput i s I WIKAririsss 的 cy to continue实验2两个数相乘的实验(无符号数相乘)实验内容:实现十进制数的乘法。要求被乘数和乘数均以 ASCII码形式各自顺序存放在内存中,乘积在屏幕上显示出来。完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB the output is: ,$DATA1 DB 31H,32H,33HDATA2 DB 35H,36HDATAS ENDS;此处输入堆栈段代
6、码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV DL,10MOV AL,DATA10 ;AL=31HSUB AL,30H ;AL=01HMUL DL;乘 10 ;AL=10ADD AL,DATA11;AL=10 +32HSUB AL,30H ;AL=10 +32H-30H=12MUL DL ;AL=120ADD AL,DATA12 ;AL=120+33HSUB AL,30H;AL=120+33H-30H=123JMOV AL,DATA20 ;A
7、L=35HSUB AL,30H ;AL=5MUL DL;乘 10 ;AL=50ADD AL,DATA21 ;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
8、;! ! !这里千万不能把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 21HMOV DL,CLADD DL,30HMOV AH,02打印第四位INT 21HCODES ENDSEND START实验3字符串匹配实验match” ,实验内容:编写程序实现两个字符申比较。如果相同,则屏幕显示否则屏幕显示” no
9、match” ,完整代码如下:DATAS SEGMENT;此处输入数据段代码PRINT1 DB input the first string: ,$PRINT2 DB 13,10input the second string: ,$PRINT3 DB match ,$PRINT4 DB nomatch ,$PRINT5 DB 13,10output: ,$STRING1 DB 30 DUP(00H),13,10$STRING2 DB 30 DUP(00H),13,10$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUM
10、E CS:CODES,DS:DATAS,SS:STACKS,ES:DATASSTART: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,09IN
11、T 21HMOV AH,01;输入字符至ALINT 21HCMP AL,/JE L1MOV DI,ALINC DIJMP INPUT2L1: MOV CX,30 ;CX=30代表比较 30次MOV SI,00HCOMPARE:;字符申一个一个比较MOV AL,STRING1SI;取STRING1存储单位中的第SI个字符赋给ALCMP AL,STRING2SI ;AL与STRING2存储单位中的第SI个字符比较JNE NOMATCHINC SILOOP COMPAREJMP MATCHLEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT4MOV AH,09INT 2
12、1HJMP L2MATCH:;打印 output:matchLEA DX,PRINT5MOV AH,09INT 21HLEA DX,PRINT3MOV AH,09INT 21HL2: MOV AH,4CHINT 21HCODES ENDSEND START运行结果:UQS-dx 0.J4, Cpj 4peed eye岫;rureekip CJr PregifJm EWTLMinput tlic F irst string asdf/ input the second string:asdfz output: FKltchPrt欢 diiy kfcfy tu圈 UOiBoK 0./4 Cpu 部
13、wdt 3000 cycles Framskp 0, Pragraunc DWltMPinput the f ipst stririgasdf/input 七he second str in(|f:asdf azoutput; iMiftMtchPres4i ary key to uonliitie实验4从键盘输入数据并显示的实验实验内容:将键盘输入的2位十六进制数转换为等值的二进制数,并在屏幕上显示。歹0如:键入f2,则显示11110010.完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB please input a string: ,$STRING2 DB
14、 13,10the output is: ,$STRING3 DB 13,10,nput error ,13,10$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码L0: LEA DX,STRING1;打印字符申 STRING1MOV AH,09INT 21HMOV AH,01;输入第一个字符至AL中INT 21HCMP AL, 0JB ERROR1CMP AL,9JBE ENTER1C
15、MP AL, AJB ERROR1CMP AL, FJBE ENTER1CMP AL, aJB ERROR1CMP AL, fJBE ENTER1ERROR1:LEA DX,STRING3;打印字符申 STRING3MOV AH,09INT 21HJMP L0ENTER1:CALL ASC2BCD ;把ASCI码转化成十进制数BCD码MOV CL,4ROL AL,CLMOV BL,AL ;把高四位放到BL寄存器中;输入第二个字符MOV AH,01;输入第二个字符至AL中INT 21HCMP AL, 0JB ERROR1CMP AL, 9JBE ENTER2CMP AL,AJB ERROR1CM
16、P AL, FJBE ENTER2CMP AL, aJB ERROR1CMP AL, fJBE ENTER2ENTER2:CALL ASC2BCD ;把ASCI码转化成十进制数BCD码ADD BL,ALLEA DX,STRING2;打印字符申 STRING2MOV AH,09INT 21HMOV CX,9CLC滞空标志位SHOW: ;显示BL中的二进制数DEC CXJE NEXT ;输出完八位之后返回DOSROL BL,1 ;循环左移一位,若溢出为1,则CF=1JC M1JMP M2M1: MOV DL,1 ;若CF=1,转至 M1 丁印 1MOV AH,02INT 21HJMP SHOWM2
17、: MOV DL,0 ;若CF=0,转至 M1 打印 0MOV AH,02INT 21HJMP SHOWNEXT:MOV AH,4CHINT 21HASC2BCD PROCJBE L1 ;若AL 每,转 L1SUB AL,07H ;若输入的数为AF,或者af,则减乙A接在39H后面,AF=3AH3FH,a 仁5AH5FHL1: SUB AL,30H ;减 30HAND AL,0FH ;滤除高位,保留低位,因为af恰好比AF大20H,这样af就和AF的数值一样了RETASC2BCD ENDPCODES ENDSEND START输出结果为:(若输出不在09, AF,af内,则重新输入)DOJju
18、ok Cpu speed 300C cyH” fra me skip Dr Program; DWTLMfljjiikJLi1 血 strdiig;至 lii|jut errurplease Input a strlnq:dsinput errorplease input a strinqi3pinput errorplease input o string;IN the output JR: Il 11 rtf)Piemr any key tu cuntiume实验内容:先在屏幕上显示“input string, ”,输入字符申;再显示“result=如为09的数字,则计数器加1,如为非数字
19、,则直接显示,但不计数。完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB input string: ,$STRING2 DB 13,10result= ,$STRING3 DB 13,10zifu: ,$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA DX,STRING1;打印字符申1MOV AH,09INT 21HMOV CX,0MOV BX,
20、0INPUT:MOV AH,01;输入字符至ALINT 21HCMP AL,/ ;输入/ 后转L0JE L0CMP AL, 0 ;下溢出转 RUZHANJB RUZHANCMP AL, 9 ;上溢出转 RUZHANJA RUZHANINC CL ;若为数字则计数器+1JMP INPUTRUZHAN:;非数字字符入栈PUSH AXADD BL,1 ;BL代表入栈的字符个数,方便待会输出JMP INPUTL0:LEA DX,STRING3;打印字符申3MOV AH,09INT 21HCHUZHAN:POP AXMOV DX,AXMOV AH,02INT 21HSUB BL,1CMP BL,0 ;入
21、了多少个栈,出多少栈JNE CHUZHANOUTPUT:;输出数字的个数LEA DX,STRING2;打印字符申2INT 21HMOV DL,CLADD DL,30HMOV AH,02INT 21HMOV AH,4CHINT 21HCODES ENDSEND START输出结果为:(这里非数字字符输出顺序与输入顺序相反)DO&Bn0.74rQu 3000 Frametbp 0r Programs DW1K11in pit str img : asdlnZ3k4jlzHi tuL i jklidxfljr mi 11-5dniy krij to coni hmer实验6改变年月日的实验实验内容:
22、先在屏幕上显示“ what is the date(mm/dd/yy)? 从键盘输入的月日年能把计算机的系统日期改为你键入的值。完整代码如下:DATAS SEGMENTS1DB 0AH,0DH,what is the date(mm/dd/yy)?: ,$DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DX,OFFSET S1MOV AH,09H;打印字符申what is the date(mm/dd/yy)?:INT
23、 21HMOV DX,0H;DX=CH=0KAISHI:MOV CL,0;用来压缩移位SHURU:MOV AH,01H;输入字符存入AL中INT 21HMOV AH,0AH;10武给 AHCMP AL,0DH ;AL=13则结束,设置日期JE GENGGAICMP AL,/;计算来判断是年,月,日JE ZIZENGAND AL,0FHCMP CH,0;等丁 0则转月JE YUECMP CH,1;等丁 1则转日JE RICMP CH,2;等丁 2则转年JE NIANZIZENG: INC CHJMP SHURU ;无条件转移至SHURUYUE:ADD DH,ALCMP CL,0JNZ KAISH
24、IINC CLMOV AL,DHMUL AHMOV DH,ALJMP SHURU ;无条件转移至SHURURI:ADD DL,ALCMP CL,0JNZ KAISHIINC CLMOV AL,DLMUL AHMOV DL,ALJMP SHURU ;无条件转移至SHURUNIAN:CMP CL,0JNZ XIABUADD BL,ALMOV CL,03H;3 赋给 CLJMP SHURU ;无条件转移至SHURUXIABU:MOV AH,0滞空 AHMOV SI,BX;SI=BXSHL BX,CL;BX左移三位,乘以8SHL SI,1SI左移一位,乘以2ADD BX,SI;两个相加,即乘以10AD
25、D BX,AX;BX加上新输入的数字JMP SHURUGENGGAI:MOV AH,2BH;设置日期INT 21HMOV AH,4CHINT 21HCODES ENDSEND START否则可能计算输出结果为:(设置2008年12月3日,注意如果要设置好系统, 机的日期改变不了)圈 DDSBox 3.74, Cpu 申5000 Firdrrf 扫 0. PrLgramc DWTFMPiht is the daiteCim/dirtyy B?: lZ/GB/i9(J0HPress 两叫 key to cant inue实验7将小写字母转换为大写字母的实验实验内容:接收键入字符(以Ctrl-c为结
26、束),将小写字母变为大写字母,并在屏幕上显示。完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB 13,10please input a string: ,$STRING2 DB 13,10,the output string is: ,$DATA DB 100DUP(00H),$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码M: LEA SI,DATAL
27、EA DX,STRING1;打印字符申1MOV AH,09INT 21HINPUT:MOV AH,01;输入字符CINT 21HCMP AL,03HJE OUTPUTCMP AL, aJB MCMP AL, zJA MSUB AL,20H ;减 20H 变小写MOV SI,ALINC SIJMP INPUTOUTPUT:LEA DX,STRING2;打印字符申2LEA SI,DATAL1:MOV DL,SICMP DL,00HJE ENDINGMOV AH,02INT 21HINC SIJMP L1ENDING:MOV AH,4CHINT 21HCODES ENDSEND START运行结果为
28、:(如果输入的不在af中,则重新输入)DOSBcx 0-4, Cpu sprees: 100G uyHf. Fraincskip 0, Progr占E: DV/ltMPuLease input a stringJ| Ltiixe i rip it fl Kir 0 mg :F pledx已 input a 零trMiqxdf切 please input a strhig:Isbglsdfsaisq* the oirtput strin(f isLSHSLSJ3DF5ASGPress any key to ccmtLnue_实验8排序实验(09)实验内容:从首地址为1000H开始存放10个数,将这些数按降序排列完整代码如下:DATAS SEGMENT;此处输入数据段代码STRING1 DB please input 10 numbers: ,$STRING2 DB 13,10,the sorted numbers are: ,$ORG 1000HDATA DB 10DUP(00H),$DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATAS
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1