汇编实验12.doc

上传人:罗晋 文档编号:5656965 上传时间:2020-07-20 格式:DOC 页数:17 大小:530KB
返回 下载 相关 举报
汇编实验12.doc_第1页
第1页 / 共17页
汇编实验12.doc_第2页
第2页 / 共17页
汇编实验12.doc_第3页
第3页 / 共17页
汇编实验12.doc_第4页
第4页 / 共17页
汇编实验12.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《汇编实验12.doc》由会员分享,可在线阅读,更多相关《汇编实验12.doc(17页珍藏版)》请在三一文库上搜索。

1、暨南大学本科实验报告专用纸课程名称 汇编语言程序设计 成绩评定 实验项目名称 子程序程序设计 指导教师 实验 一、 实验目的和要求1) 学习子程序的定义和调用方法。 2) 掌握子程序设计、编制及调试。 二、实验内容 1)编写一个通用子程序用来将十进制数(从键盘输入)转换为P(从键盘输入)进制数。P可以为2、8或16。2)编写子程序,将字节单元中的二进制数转换成十进制数输出。3)编写子程序,在字符串中第n个字符前插入长度为m的字符串。二、程序流程图(每题分开写)1. 2 .3三、源程序(每题分开写)1.DSEG SEGMENT DATA ; add your data here! INPUT_T

2、IPS1 DB PLEASE INPUT A NUMBER:, 0DH, 0AH, $ INPUT_TIPS2 DB 0DH, 0AH, HEX(H), OCTAL(O), OR BINARY(B) ? :, 0DH, 0AH, $ INPUT_TIPS3 DB 0DH, 0AH, HEX(H) IS :, 0DH, 0AH, $ INPUT_TIPS4 DB 0DH, 0AH, OCTAL(O) IS :, 0DH, 0AH, $ INPUT_TIPS5 DB 0DH, 0AH, BINARY(B) IS :, 0DH, 0AH, $ INPUT_NUMBER DB 128 DUP(0),

3、$ TRUE_NUMBER DW 0DSEG ENDSSSEG SEGMENT STACK STACK db 256 DUP(0)SSEG ENDSCSEG SEGMENT CODE START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX ; add your code here ;INPUT TIPS MOV AH, 09H MOV DX, OFFSET INPUT_TIPS1 INT 21H MOV AH, 0AH MOV DX, OFFSET INPUT_NUMBER INT 21H CALL

4、SAVE_NUMBER ;INPUT TIPS MOV AH, 09H MOV DX, OFFSET INPUT_TIPS2 INT 21H MOV AH, 01H INT 21H CALL CHANGE FINISH: MOV AX, 4C00h ; exit to operating system. INT 21h START ENDP;入口 TRUE_NUMBER=数two PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;INPUT TIPS MOV AH, 09H MOV DX, OFFSET INPUT_TIPS5 INT 21H MOV CL,

5、 15 AGAIN2: MOV DX, TRUE_NUMBER SHR DX, CL JMP PRINT_IT2NEXT2: CMP CL, 0 JZ two_FINISH SUB CL, 1 JMP AGAIN2 PRINT_IT2: AND DX, 01H CMP DX, 09H JA NOT_ZERO2 SUB DX, 7HNOT_ZERO2: ADD DX, 37H MOV AH, 02H INT 21H JMP NEXT2 two_FINISH: MOV AH, 02H MOV DX, B INT 21H POP DX POP CX POP BX POP AX RETTwo ENDP

6、;入口 TRUE_NUMBER=数eight PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;INPUT TIPS MOV AH, 09H MOV DX, OFFSET INPUT_TIPS4 INT 21H MOV CL, 15 AGAIN8: MOV DX, TRUE_NUMBER SHR DX, CL JMP PRINT_IT8NEXT8: CMP CL, 0 JZ eight_FINISH SUB CL, 3 JMP AGAIN8 PRINT_IT8: AND DX, 07H CMP DX, 09H JA NOT_ZERO8 SUB DX, 7HN

7、OT_ZERO8: ADD DX, 37H MOV AH, 02H INT 21H JMP NEXT8 eight_FINISH: MOV AH, 02H MOV DX, O INT 21H POP DX POP CX POP BX POP AX RETeight ENDP ;入口 TRUE_NUMBER=数sixth PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;INPUT TIPS MOV AH, 09H MOV DX, OFFSET INPUT_TIPS3 INT 21H MOV CL, 12 ;每次移4位AGAIN: MOV DX, TRUE_N

8、UMBER SHR DX, CL JMP PRINT_ITNEXT: CMP CL, 0 JZ SIXTH_FINISH SUB CL, 4 JMP AGAIN PRINT_IT: AND DX, 0FH CMP DX, 09H JA NOT_ZERO SUB DX, 7HNOT_ZERO: ADD DX, 37H MOV AH, 02H INT 21H JMP NEXT SIXTH_FINISH: MOV AH, 02H MOV DX, H INT 21H POP DX POP CX POP BX POP AX RETSIXTH ENDP ;入口,AL=选择目的进制CHANGE PROC N

9、EAR PUSH AX PUSH BX PUSH CX PUSH DX CMP AL, H JZ HEX JA OCTAL JL BINARYHEX: CALL SIXTH JMP CHANGE_TO_SECTION_FINISHOCTAL: CALL eight JMP CHANGE_TO_SECTION_FINISHBINARY: CALL two JMP CHANGE_TO_SECTION_FINISH CHANGE_TO_SECTION_FINISH: POP DX POP CX POP BX POP AX RETCHANGE ENDP ;SAVE_NUMBER PROC NEAR P

10、USH AX PUSH BX PUSH CX PUSH DX MOV CL, INPUT_NUMBER + 1 MOV CH, 0 MOV BX, CX MOV DL, 1 ;判断是否为负数 MOV CH, INPUT_NUMBER + 2 CMP CH, - MOV CH, 0 JNE LOOP1 DEC CX ;转16进制存变量中LOOP1: MOV AL, INPUT_NUMBER + BX + 1 SUB AL, 30H DEC BX CMP DH, 0 JNZ DOUBLE JMP SINGLEDOUBLE: MOV AH, 0 MOV BX, DX MUL DX MOV DX, B

11、X JMP ADD_TRUE_NUMBERSINGLE: MUL DLADD_TRUE_NUMBER: ADD TRUE_NUMBER, AX MOV AL, DL MOV DL, 10 MUL DL MOV DX, AX LOOP LOOP1 CMP DH, - JNE SAVE_NUMBER_FINISH MOV AX, TRUE_NUMBER NEG AX MOV TRUE_NUMBER, AX SAVE_NUMBER_FINISH: POP DX POP CX POP BX POP AX RETSAVE_NUMBER ENDP CSEG ENDSEND START ; set entr

12、y point.2.DATASEGMENTXDW66DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,XCALLDISPBX;显示EXIT:MOVAH,4CHINT21H;=DISPBX PROCMOVAX,BXMOVBX,10MOVCX,0ZH1:MOVDX,0DIVBXADDDL,0PUSHDXINCCXCMPAX,0JNZZH1MOVAH,2ZH2:POPDXINT21HLOOPZH2MOVDL,INT21HRETDISPBX ENDP;=CODEENDSENDSTART3. DSEG SEGMEN

13、T DATASTRING1 db 50 db 0 db 50 dup($) db $STRING2 db 50 db 0 db 50 dup($) db $STRING3 db Please enter the STRING1. db 0dh,0ah,$STRING4 db 0dh,0ah,Please enter the STRING2. db 0dh,0ah,$STRING5 db 0dh,0ah,Please enter the location in the STRING1 you want. db 0dh,0ah,$STRING6 db 50 dup($)DSEG ENDSSSEG

14、SEGMENT STACK STACK db 256 DUP(0)SSEG ENDSCSEG SEGMENT CODE START PROC FAR ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX mov dx,offset STRING3 ;语句1 mov ah,09h int 21h mov ah,0ah mov dx,offset STRING1 ;输入s1 int 21h mov dx,offset STRING4 ;语句2 mov ah,09h int 21h mov ah,0ah mov dx,offset S

15、TRING2 ;输入2 int 21h mov dx,offset STRING5 ;语句3 mov ah,09h int 21h mov ah,01h ;输入插入位置 int 21h CALL SON ;子程序 SON PROC sub al,30h mov cx,0 mov cl,al mov bl,al mov si,offset STRING1+2 mov di,offset STRING6first: mov dl,byte ptr si mov byte ptr di,dl inc si inc di loop first mov si,offset STRING2+2second

16、: cmp byte ptr si,0dh jz thirdnext2: mov dl,byte ptr si mov byte ptr di,dl inc si inc di jnz secondthird: mov si,offset STRING1+2 mov bh,0 add si,bxthird1: cmp byte ptr si,$ jz forthnext3: mov dx,si mov di,dx inc si inc di jnz third1forth: mov si,offset STRING1 mov di,offset STRING6forth1: cmp byte

17、ptr di,$ jz overnext4: mov dl,byte ptr di mov byte ptr si,dl inc si inc di jnz forth1over: mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h mov dx,offset STRING1 mov ah,09h int 21hSON ENDP MOV AX, 4C00h ; exit to operating system. INT 21h START ENDPCSEG ENDSEND START ; set entry point.四、结果分析(对输入输出部分截屏)实验1:实验2:实验3五、实验总结子程序开始没有用proc,像以前用段定义 的一样用冒号

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1