1、内蒙古工业大学1内蒙古工业大学 微型计算机原理及应用实验参考汇编程序实验 01A将 FFFFH 送到 AX,BX,CX,DX,SI,DI,BP 寄存器程序如下:CODE SEGMENTASSUME CS:CODESTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,0FFFFHMOV BX,AXMOV CX,AXMOV DX,AXMOV SI,AXMOV DI,AXMOV BP,AX;=RETSTART ENDPCODE ENDSEND STT实验 01B将 FFH 送到内存 1000H,1001H ,1002H,1003H,1004H 单元中程序
2、如下:DATA SEGMENTORG 1000HH1 DB 5 DUP(?)DATA ENDS内蒙古工业大学2CODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AL,0FFHMOV DI,1000HMOV CX,5 ;循环 5 次LP1:MOV DI,AL ;FF 放入 1000H-1004H 中INC DIDEC CXJNZ LP1;=RETSTART ENDPCODE ENDSEND STT实验 02A编写 一个加法程序,在数据段偏移地址 1000H 处开始,存放有两个 3 字节
3、长的数据(高位对应高地址,低位对应低地址),求这两数据(十六进制数)的和,并将结 果放在两数据之后,利用 DEBUG 调试程序,并求解:CCBBAAH+223344H=?CCBBAA+554433H=?程序如下:DATA SEGMENTORG 1000HH1 DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AX内蒙古工业大学3PUSH AXMov ax,dsegMov ds,ax;=MOV SI,1000H;不带最高位进位的全加器MOV DI,1003HMOV BX,1
4、006HMOV CX,3CLCAA: MOV AL,SIADC AL,DIMOV BX,ALPUSHF;保护 FR,这里其实没有必要,因为 INC 不会产生进位INC SIINC DIINC BXPOPFLOOP AAMOV DL,0 ;最高位进位ADC DL,0MOV DI,1009HMOV DI,DL;=RETSTART ENDPCODE ENDSEND STT实验 02B用串传送指令把 A 程序的数据块(被加数、加数、和)偏移地址 1000H 开始的区域传递到同一数据段的偏移地址为 1010H 开始的区域,并利用 DEBUG 查看运行结果程序如下:内蒙古工业大学4DATA SEGMENT
5、ORG 1000HH1 DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DS ;使 ES 段地址与 DS 相同MOV ES,AXMOV SI,1000H;不带最高位进位的全加器MOV DI,1003HMOV BX,1006HMOV CX,3CLCAA: MOV AL,SIADC AL,DIMOV BX,ALPUSHF;保护 FR,这里其实没有必要,因为 INC 不会产生进位INC SIINC DIINC BXPOPFLOOP AAMO
6、V DL,0 ;最高位进位ADC DL,0MOV DI,1009HMOV DI,DLMOV SI,1000H ;串传送内蒙古工业大学5MOV DI,1010HMOV CX,5CLDREP MOVSW ;一次传送一个字;=RETSTART ENDPCODE ENDSEND STT实验 02C,选作编写一个两位十进制数加法程序,当从键盘上输入:n1n2+n3n4 则在 CRT 上显示n1n2+n3n4=n5n6程序如下:DATA SEGMENTH1 DB “The addends all must be two figures, insufficient adds 0 in front.“,13,
7、10,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXLEA DX,H1 ;打印注释:加数和被加数都必须为两位数,不够的前面补 0MOV AH,09HINT 21HSUB CX,CX ;CX 清零SUB DX,DX ;DX 清零CLC ;清 CF内蒙古工业大学6MOV AH,1 ;输入第 1 个数INT 21HMOV CH,AL ;放入 CHSUB CH,30H ;ASCII 码调整INT 21H ;输入第 2 个数MOV CL,
8、AL ;放入 CLSUB CL,30H ;ASCII 码调整MOV AH,2 ;打印加号MOV DL,2BHINT 21HMOV AH,1 ;输入第 3 个数INT 21HMOV DH,AL ;放入 DHSUB DH,30H ;ASCII 码调整INT 21H ;输入第 4 个数MOV DL,AL ;放入 DLSUB DL,30H ;ASCII 码调整ADD CL,DL ;ASCII 码个位加法CMP CL,10;比较个位数结果是否大于 10JNC AA ;大于等于 10 则跳至 AAADD CH,DH;个位不向十位进位的十位加法JMP BBAA: ADD CH,DH ;个位向十位有进位的十位
9、加法ADD CH,1SUB CL,10BB: MOV DL,3DH ;打印等号内蒙古工业大学7MOV AH,2INT 21HCMP CH,10 ;比较十位数结果是否大于 10JNC CCMOV DL,0 ;打印十位不向百位进位的百位 =0INT 21HJMP CCCCC: MOV DL,31H ;打印十位向百位进位的百位=1INT 21HSUB CH,10CCC:ADD CH,30H ;ASCII 码调整MOV DL,CH ;打印结果中的十位INT 21HADD CL,30H ;ASCII 码调整MOV DL,CL ;打印结果中的个位INT 21HMOV AH,1 ;暂停INT 21H;=RE
10、TSTART ENDPCODE ENDSEND STT实验 03A在数据段偏移地址 0100H 处开始,存放 0-9 的平方值(构成一个表格),任给一个自然数M 在 0110H 单元中(0 to quit.“,13,10,$内蒙古工业大学10ERR DB 13,10,“The input number must be a HEX (0F).“,13,10,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARSTT:PUSH DSSUB AX,AXPUSH AX;=MOV AX,DATAMOV DS,AXLEA DX,TIP ;打印 TIP 信息MOV AH,09HINT 21HBEGIN:MOV DL,13 ;打印换行MOV AH,2INT 21HMOV DL,10 ;打印回行首INT 21HMOV AH,1 ;等待从键盘输入INT 21HMOV SI,OFFSET H2 ;保护输入MOV SI,ALCMP AL,27 ;如果按下 键,跳至 QUITJZ QUITCALL DISPLAY0 ;调用 DISPLAY0 子程序CALL ASCII2HEX ;调用 ASCII2HEX 子程序