西电微机原理上机作业完整版

  • 格式:docx
  • 大小:249.19 KB
  • 文档页数:17

上机作业(一)指令SRC寻址方式SRC的地址AX推算值AX实际值MOV AX, CX 寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A4 A5A4 MOV AX, ES:[BX] 寄存器间接寻址1542:0004 C5C4 C5C4 MOV AX, [BX+05H] 寄存器相对寻址1541:0009 AAA9 AAA9 MOV AX, SS:[BX]+03H 寄存器相对寻址153F:0007 B8B7 B8B7 MOV AX, TABLE [BX] 寄存器相对寻址1541:0008 A9A8 A9A8 MOV AX, 07H [BX] 寄存器相对寻址1541:000B ACAB ACAB MOV AX, [BP] 寄存器间接寻址153F:0003 B4B3 B4B3 MOV AX, TABLE [BP] 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, 08H [BP] 寄存器相对寻址153F:000B BCBB BCBB MOV AX, [BP+06H] 寄存器相对寻址153F:0009 BAB9 BAB9 MOV AX, DS:[BP+03H] 寄存器相对寻址1541:0006 A7A6 A7A6 MOV AX, [BP]+05H 寄存器相对寻址153F:0008 B9B8 B9B8 MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005 C6C5 C6C5 MOV AX, [DI+06H] 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, [DI]+05H 寄存器相对寻址1541:0006 A7A6 A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006 A7A6 A7A6MOV AX, [SI] 寄存器间接寻址1541:0002 A3A2 A3A2 MOV AX, TABLE [DI] 寄存器相对寻址1541:0005 A6A5 A6A5 MOV AX, [SI]+05H 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006 A7A6 A7A6 MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009 AAA9 AAA9 MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000A ABAA ABAA MOV AX, ES:[BX] [DI] 基址变址寻址1542:0005 C6C5 C6C5 MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006 B7B6 B7B6 MOV AX, TABLE [BP] [DI] 基址变址且相对寻址1541:0008 A9A8 A9A8 MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005 C6C5 C6C5 MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000A BBBA BBBA MOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007 B8B7 B8B7 MOV AX, [BP] [SI] 基址变址寻址153F:0005 B6B5 B6B5 MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009 BAB9 BAB9MOV AX, TABLE [BP+02H][DI+03H]基址变址且相对寻址1541:000D AEAD AEAD1.编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

STACK SEGMENT STACK 'STACK' DW 100H DUP(?)TOP LABEL WORDSTACK ENDS ;堆栈段DATA SEGMENTADD1 DD 12678532HADD2 DD 21736543HSUM DD ?DATA ENDS ;数据段CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA SI,ADD1LEA DI,ADD2MOV AL,[SI]ADD AL,[DI]DAAMOV BYTE PTR SUM,ALMOV AL,[SI+1]ADC AL,[DI+1]DAAMOV BYTE PTR SUM+1,AL MOV AL,[SI+2]ADC AL,[DI+2]DAAMOV BYTE PTR SUM+2,AL MOV AL,[SI+3]ADC AL,[DI+3]DAAMOV BYTE PTR SUM+3,AL MOV AX,WORD PTR SUM+2 CALL DISPAXMOV AX,WORD PTR SUM CALL DISPAXMOV AH,4CHINT 21H DISPAL PROC NEAR PUSH AXPUSH CXPUSH DXPUSH AXMOV CL,4SHR AL,CL CALL CHANG MOV AH,02 MOV DL,AL INT 21HPOP AXAND AL,0FH CALL CHANG MOV AH,02 MOV DL,AL INT 21HPOP DXPOP CXPOP AXRET DISPAL ENDP CHANG PROC NEAR CMP AL,10 JNGE CHANG1 ADD AL,7 CHANG1: ADD AL,30H RET CHANG ENDP DISPAX PROC NEARXCHG AL,AH CALL DISPAL XCHG AH,AL CALL DISPAL RET DISPAX ENDP CODE ENDSEND START2. 有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

STACK SEGMENT STACKDB 256 DUP(?)STACK ENDSDATA SEGMENTDATA1 DW7800H,6832H,0000H,87H,1275H,0EC34HSTRING1 DB 'inputnumber:',0DH,0AH,'$'STRING2 DB 'The numbers from large to small is:',0DH,0AH,'$'DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACK MOV SS,AXLEA DX,STRING1 MOV AH,09HINT 21HMOV CX,6LEA SI,DATA1 L1: MOV AX,[SI]ADD SI,2CALL DISPAXCALL DISPCRLOOP L1MOV CX,5LEA SI,DATA1 ADD SI,10LP1: PUSH CXPUSH SILP2: MOV AX,[SI]CMP AX,[SI-2] JBE NOXCHGXCHG AX,[SI-2] MOV [SI],AX NOXCHG: DEC SIDEC SILOOP LP2POP SIPOP CXLOOP LP1LEA DX,STRING2 MOV AH,09HINT 21HMOV CX,6LEA SI,DATA1 L2: MOV AX,[SI]ADD SI,2CALL DISPAXCALL DISPCRLOOP L2 MOV AH,4CH INT 21H DISPAL PROCPUSH AXPUSH CXPUSH DXPUSH AXMOV CL,4SHR AL,CL CALL CHANG MOV AH,02H MOV DL,AL INT 21H POP AXAND AX,0FH CALL CHANG MOV AH,02H MOV DL,AL INT 21HPOP DXPOP CXPOP AXRET DISPAL ENDP CHANG PROCCMP AL,10 JNGE CHANG1 ADD AL,7 CHANG1: ADD AL,30HRET CHANG ENDP DISPAX PROCXCHG AL,AH CALL DISPAL XCHG AH,AL CALL DISPAL RET DISPAX ENDP DISPCR PROCPUSH AXPUSH DX MOV AH,2 MOV DL,0AH INT 21HMOV AH,2 MOV DL,0DH INT 21HPOP DXPOP AXRET DISPCR ENDP CODE ENDSEND START3.编写如下程序,并在机器上调试成功。

程序采用菜单式选择,可以接收用户从键盘输入的四个命令(1-4),各命令功能分别为:(1)按下“1”键,完成字符串小写字母变成大写字母。

(2)按下“2”键,完成找最大值(3)按下“3”键,完成排序(4)按下“4”键,结束程序运行,返回系统提示符。

DISPL MACRO STRPUSH DXPUSH AXLEA DX,STRMOV AH,09HINT 21HPOP AXPOP DXENDMISCONTINUE MACRO LDISPS 15,10,SMENU MOV AH,08HINT 21HCMP AL,1BHJNE LJMP MAINENDMCURSOR MACRO CURX,CURY PUSH AXPUSH BXPUSH DXMOV AH,02HMOV DH,CURXMOV DL,CURYMOV BH,0INT 10HPOP DXPOP BXPOP AXENDMDISPS MACRO X,Y,STRPUSH AXPUSH BXPUSH DXMOV AH,02HMOV BH,00HMOV DH,XMOV DL,YINT 10HLEA DX,STRMOV AH,09HINT 21HPOP DXPOP BXPOP AXENDMSCROLL MACRO N,ULR,ULC,LRR,LRC,ATT PUSH AXPUSH BXPUSH CXPUSH DXMOV AH,06HMOV AL,NMOV CH,ULRMOV CL,ULCMOV DH,LRRMOV DL,LRCMOV BH,ATTINT 10HPOP DXPOP CXPOP BXPOP AXENDMPREP MACRO TLEA SI,INBUF+1LEA DI,OUTBUFSCROLL 21,2,0,22,79,0FHDISPS 3,20,TDISPS 6,2,CAPIONDISPS 8,2,INCAPMOV AH,0AHINT 21HMOV CH,0MOV CL,[SI]INC SIENDMSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTBASE DW MAIN,LTC,FMV,SORTS,EXITWELCM DB 'Welcome to this program!$'MMENUC DB 'Please input the number!$'MMENU1 DB ' 1 -Lowercase Letters To Capital Letters$' MMENU2 DB ' 2 -Find The Maximum figure$'MMENU3 DB ' 3 -Sort$'MMENU4 DB ' 4 -Exit!$'SMENU DB 'Press Any Key To restart,Press "ESC" To Return To Main Menu!$'WROCAP DB 'WRONG! You have press " " key! Please input a number between 1 and 4!$'CAPION DB 'Please Input Your Strings and End With "Enter" Key!$'INCAP DB 'Your Input Is: $'INBUF DB 100DB ?DB 100 DUP(?)OUTCAP DB ' My Output Is: $'OUTBUF DB 100 DUP(?)MAXCAP DB 'The char of max ASCII is: .$'ERRINF DB 'ERROR! Please check the format you input!$'TDINV DB ' Invalid time data! Input again!$'NODATCAP DB ' You have input nothing!$'TIME DB 8 DUP (':'),12 DUP (' ')DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SP,TOPLEA DX,INBUFCLCMAIN: SCROLL 0,0,0,24,79,0SCROLL 25,0,0,24,79,50HSCROLL 21,2,0,22,79,0FHDISPS 8,20,MMENUCDISPS 10,20,MMENU1DISPS 12,20,MMENU2DISPS 14,20,MMENU3DISPS 16,20,MMENU4ML: CURSOR 19,1DHMOV AH,01HINT 21HCMP AL,31HJL ERRORCMP AL,35HJG ERRORAND AX,00FHLEA BX,BASESHL AL,1ADD BX,AXJMP WORD PTR [BX]; CMP AL,'1'; JE LTC; CMP AL,'2'; JE FMV; CMP AL,'3'; JE SORTS; CMP AL,'4'; JE EXIT ERROR: CMP AL,0DHJE MCRMOV [WROCAP+23],AL ;Other charMOV [WROCAP+24],' 'JMP DMCR: MOV WORD PTR [WROCAP+23],'RC'D: DISPS 20,5,WROCAP ;Show the wrong information JMP MLLTC: CALL LLTOCLISCONTINUE LTCFMV: CALL FMAXVISCONTINUE FMVSORTS: CALL SORTISCONTINUE SORTSEXIT: SCROLL 0,0,0,24,79,0MOV AH,4CHINT 21HLLTOCL PROCREFLASHL:PREP MMENU1CMP CL,0JE REFLASHLLL1: MOV AL,[SI]CMP AL,'a'JB MTOB ;NO CHANGECMP AL,'z'JA MTOBSUB AL,20H ;ConvertMTOB: MOV [DI],ALINC SIINC DILOOP LL1MOV BYTE PTR [DI],'$'DISPS 10,2,OUTCAPDISPS 10,17,OUTBUF RETLLTOCL ENDPFMAXV PROCPUSH BX REFLASHF:PREP MMENU2CMP CL,0JE REFLASHFMOV AL,0FL1: CMP AL,[SI]JA NEXTMOV AL,[SI]NEXT: INC SILOOP FL1MOV [MAXCAP+26],AL DISPS 10,2,MAXCAPPOP BXRETFMAXV ENDPSORT PROCPREP MMENU3DEC CXADD SI,CXMOV BYTE PTR [SI+1],'$' LP1: PUSH CXPUSH SILP2:MOV AL,[SI]CMP AL,[SI-1]JBE NOXCHGXCHG AL,[SI-1]MOV [SI],AL NOXCHG: DEC SILOOP LP2POP SIPOP CXLOOP LP1DISPS 10,2,OUTCAPDISPS 10,17,INBUF[2] RETSORT ENDPBCDASC PROC NEARPUSH BXCBWMOV BL,10DIV BLADD AL,30HMOV TIME[SI],AL INC SIADD AH,30HMOV TIME[SI],AH INC SIPOP BXRETBCDASC ENDPCODE ENDSEND START按下4键。