当前位置:文档之家› 华工微机实验报告

华工微机实验报告

微机系统与接口实验电子与信息学院电类联合班何俊实验二:将ASCII码表示的十进制数转换为二进制数1.将ASCII码表示的十进制数转换为二进制数。

DATA SEGMENTORG 3500HNUM1 DB 5 DUP(0)ORG 3510HNUM2 DD 5 DUP(0)DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUM1MOV SI,AXMOV AX,OFFSET NUM2MOV DI,AXMOV CX,5MOV AX,0MOV BH,0CHANGE:MOV BL,[SI]SUB BL,30HMOV DX,10MUL DXADD AX,BXLOOP CHANGEEXIT:MOV WORD PTR[DI],AXMOV AH,4CHINT 21HCODE ENDSEND START2.将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。

把它转换成BCD码后,再按位分别存入350A起始的内存单元内。

若输入的不是十进制的ASCII码,则显示FF.DATA SEGMENTORG 3500HNUM1 DB 5 DUP(0);NUM1 DB ‘12345’ORG 350AHNUM2 DB 5 DUP(0)DATA ENDSSTACK SEGMENTDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUM1MOV SI,AXMOV AX,OFFSET NUM2MOV DI,AXMOV CX,5CHANGE:CMP AL,39HJA ERRORCMP AL,30HJB ERRORSUB AL,30HMOV [DI],ALADD SI,1ADD DI,1LOOP CHANGEJMP EXITERROR:MOV BX,0FFHMOV [DI],BXEXIT:MOV AH,4CHINT 21HCODE ENDSEND START3.将十六位二进制数转换为ASCII码表示的十进制数。

十六进制数的值域为0~65535,最大可转换为五位十进制数。

DATA SEGMENTORG 3500HNUM1 DD 0ORG 3510HNUM2 DB 5 DUP(0)DATA ENDSSTACK SEGMENTDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUM1MOV AX,OFFSET NUM2MOV DI,AXADD DI,5MOV CX,5MOV AX,WORD PTR[SI]MOV BX,10CHANGE:MOV DX,0DIV BXADD DL ,30HMOV [DI],DLDEC DILOOP CHANGEEXIT:MOV AH,4CHINT 21HCODE ENDSEND START4.十六进制数转换为ASCII码DATA SEGMENTORG 3500HNUM1 DD 0ORG 3510HNUM2 DB 4 DUP(0)DATA ENDSSTACK SEGMENTDD 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUM1MOV SI,AXMOV AX,OFFSET NUM2MOV DI,AXMOV BL,2MOV CX,4CHOICE:MOV AL,[SI]AND AL,0FHCMP AL,9JBE CHANGE_11JMP CHANGE_12CHANGE_11:ADD AL,30HJMP NEXT_1CHANGE_12:ADD AL,37HNEXT_1:MOV [DI],ALADD DI,1MOV AL,[SI]AND AL,0F0HSHR AL,CLCMP AL,9JBE CHANGE_21JMP CHANGE_22CHANGE_21:ADD AL,30HJMP NEXT_2CHANGE_22:ADD AL,37HNEXT_2:MOV [DI],ALADD DI,1ADD SI,1DEC BXJNE CHOICEEXIT:MOV AH,4CHINT 21HCODE ENDSEND START5.BCD码转换为二进制码DATA SEGMENTORG 3500HNUM1 DB 8 DUP(0)ORG 3510HNUM2 DB 4 DUP(0)DATA ENDSSTACK SEGMENTDB 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUM1MOV SI,AXMOV AX,OFFSET NUM2MOV DI,AXMOV CX,4MOV BL,10CHANGE:MOV AL,[SI]MUL BLADD SI,1ADD AL,[SI]ADD SI,1MOV [DI],ALADD DI,2LOOP CHANGEEXIT:MOV AH,4CHINT 21HCODE ENDSEND START实验三分支和循环程序设计实验1.设计一数据块间的搬移程序DATA SEGMENTORG 3500HMESSAGE1 DB 'HELLO KITTY'COUNT EQU 11DATA ENDSEXTRA SEGMENTORG 3510HMESSAGE2 DB 11 DUP(0)EXTRA ENDSSTACK SEGMENTDD 100 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,OFFSET MESSAGE1MOV SI,AXMOV AX,OFFSET MESSAGE2MOV DI,AXMOV AX,DSMOV ES,AXMOV CX,COUNTCLDCOMPARE:CMP SI,DIJB NEXT1JMP NEXT2NEXT1:STDADD SI,COUNT-1ADD DI,COUNT-1REP MOVSBJMP EXITNEXT2:REP MOVSBJMP EXITEXIT:MOV AH,4CHINT 21HCODE ENDSEND START2.编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。

DATA SEGMENTORG 3500HRESULT DD 0DATA ENDSCODE SEGMENTASSUME CS:CODESTART:MOV DX,1MOV BL,2SUM:MOV AL,BLINC BLMUL BLADD DX,AXCMP AX,200JB SUMPRINT:MOV AX,OFFSET RESULTMOV DI,AXMOV [DI],DXEXIT:MOV AH,4CHINT 21HCODE ENDSEND START3.求某个数据区内负数的个数。

DATA SEGMENTORG 3500HNUM DB 6H,12H,88H,82H,90H,22H,33H DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AX,OFFSET NUMMOV SI,AXMOV BL,0MOV CL,[SI]MOV CH,0INC SICHECK:MOV AL,[SI]CMP AL,10000000BJBE NEXTINC BLNEXT:INC SILOOP CHECKPRINT:MOV [SI],BLEXIT:MOV AH,4CHINT 21HCODE ENDSEND START实验四子程序设计程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。

用户按任一键,重做,按ESC键,返回主菜单。

按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。

2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。

程序按ASCII码值大小由大到小排序并输出显示。

2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。

程序将其中最大的数显示出来。

用户按任一键,重做,按ESC键,返回主菜单。

按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。

用户按任一键,重新对时,按ESC键,返回主菜单。

按5键,结束程序运行,返回系统提示符。

DATA SEGMENTORG 0000H;BUFFER POOL.BUFF DB 100DB 0DB 100 DUP(0)DATA ENDSSTACK SEGMENTSTT DB 100 DUP(0)TOP EQU LENGTH STTSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK;MAIN PROCESSSTART:MAIN PROC FARFIRST:MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFFMOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPCHOICE:MOV AH,1INT 21HCMP AL,'5'JE EXITCMP AL,'1'JE FUNCTION1CMP AL,'2'JE FUNCTION2CMP AL,'3'JE FUNCTION3CMP AL,'4'JE FUNCTION4 CHANGE_LINE:MOV DL,0AHMOV AH,2INT 21H;ERROR INPUT, CHOOSE AGAIN.JMP FIRSTFUNCTION1:MOV DL,0AHMOV AH,2INT 21HCALL F1JMP CHANGE_LINEFUNCTION2:MOV DL,0AHMOV AH,2INT 21HCALL F2JMP CHANGE_LINEFUNCTION3:MOV DL,0AHMOV AH,2INT 21HCALL F3JMP CHANGE_LINEFUNCTION4:MOV DL,0AHMOV AH,2INT 21HCALL F4JMP CHANGE_LINEEXIT:MOV AH,4CHINT 21HRETMAIN ENDP;SUBPROCESS 1F1 PROC NEAR;GET STRINGMOV SI,OFFSET BUFFMOV DX,SIMOV AH,0AHINT 21HCALL CHANGE_LINE;GET THE SIZE OF STRINGINC SIMOV CL,[SI]MOV CH,0INC SI;CHANGE THE LETTERS AND PRINT CHANGE:MOV DL,[SI]CMP DL,'Z'JBE NEXTSUB DL,20HNEXT:MOV AH,2INT 21HINC SILOOP CHANGECALL CHANGE_LINE;RETURNRETF1 ENDP;SUBPROCESS 2F2 PROC NEAR;GET STRINGMOV DX,SIMOV AH,0AHINT 21HCALL CHANGE_LINE ;GET THE SIZE OF STRING INC SIMOV CL,[SI]MOV CH,0INC SI;GET THE MAX CHARMOV AL,[SI]INC SI COMPARE:CMP AL,[SI]JA NEXTMOV AL,[SI] NEXT:INC SILOOP COMPAREPRINT:MOV DL,ALMOV AH,2INT 21HCALL CHANGE_LINE;RETURNRETF2 ENDP;SUBPROCESS 3F3 PROC NEAR;GET STRINGMOV SI,OFFSET BUFFADD SI,2MOV DX,SIMOV AH,0AHINT 21HCALL CHANGE_LINE ;GET THE SIZE OF STRING INC SIMOV CL,[SI]MOV CH,0INC SIMOV DX,SIDEC CX;BUBBLE SORTLOOP1:MOV BX,CXLOOP2:MOV AL,[SI]CMP AL,[SI+1]JA NEXTXCHG AL,[SI+1]MOV [SI],AL NEXT:INC SIDEC BXJNE LOOP2MOV SI,DXLOOP LOOP1;PRINTMOV CL,[SI-1]MOV CH,0 PRINT:MOV DL,[SI]MOV AH,2INT 21HINC SILOOP PRINTCALL CHANGE_LINE;RETURNRETF3 ENDP;SUBPROCESS 4F4 PROC NEAR;INPUT THE TIME INPUT:MOV DX,SIMOV BL,10;HOURMOV AH,0AHINT 21TCMP BYTE PTR[SI+1],2JNE INPUTSUB BYTE PTR[SI+2],30HSUB BYTE PTR[SI+3],30HMOV AL,[SI+2]MUL BLADD AL,[SI+3]MOV CH,ALCALL CHANGE_LINE;MINUTEMOV AH,0AHINT 21TCMP BYTE PTR[SI+1],2JNE INPUTSUB BYTE PTR[SI+2],30HSUB BYTE PTR[SI+3],30HMOV AL,[SI+2]MUL BLADD AL,[SI+3]MOV CL,ALCALL CHANGE_LINE;SECONDMOV AH,0AHINT 21TCMP BYTE PTR[SI+1],2JNE INPUTSUB BYTE PTR[SI+2],30HSUB BYTE PTR[SI+3],30HMOV AL,[SI+2]MUL BLADD AL,[SI+3]MOV DH,ALCALL CHANGE_LINE;1/100 SECONDMOV DL,0;SET THE TIMEMOV AH,2DHINT 21H;CHECKCMP AL,00JNE INPUT;GET THE TIMEMOV SI,OFFSET BUFFADD SI,2GET:MOV AH,2CHINT 21HMOV [SI],CHMOV [SI+2],CLMOV [SI+4],DH;BINARY TO ASCIIMOV BL,10;HOURMOV AH,0MOV AL,[SI]DIV BLADD AH,30HADD AL,30HMOV [SI],ALMOV [SI+1],AH;MINUTEMOV AH,0MOV AL,[SI+2]DIV BLADD AH,30HADD AL,30HMOV [SI+2],ALMOV [SI+3],AH;SECONDMOV AH,0MOV AL,[SI+4]DIV BLADD AH,30HADD AL,30HMOV [SI+4],ALMOV [SI+5],AH ;PRINT THE TIME ;HOURMOV DL,[SI]MOV AH,2INT 21HMOV DL,[SI+1]MOV AH,2INT 21HMOV DL,':';MINUTEMOV DL,[SI+2]MOV AH,2INT 21HMOV DL,[SI+3]MOV AH,2INT 21HMOV DL,':';SECONDMOV DL,[SI+4]MOV AH,2INT 21HMOV DL,[SI+5]MOV AH,2INT 21H;CHECK THE INPUTMOV AH,0BHINT 21HCMP AL,0FFHJE GET;RESET OR EXITMOV AH,1INT 21HCMP AL,1BHJE EXITJMP INPUT;RETURNEXIT:RETF4 ENDP;CHANGE LINECHANGE_LINE PROC NEAR PUSH AXPUSH DXMOV DL,0DHMOV AH,02INT 21HMOV DL,0AHMOV AH,02INT 21HPOP DXPOP AXRETCHANGE_LINE ENDPCODE ENDSEND START实验心得1、对于汇编程序,书上的内容有限,更多的内容需要自己上网查找甚至自己发现。

相关主题