CALL DISPLAY MOV BX,WORD PTR ADDOP2 CALL DISPLAY MOV AH,09H MOV DX,OFFSET DENGHAO INT 21H MOV BX,WORD PTR SUM+2 CALL DISPLAY MOV BX,WORD PTR SUM CALL DISPLAY MOV AH,4CH INT 21H
;----------------------------------------------------------- 跳到下一行 CRLF PROC NEAR MOV DL,0AH ;换行 MOV AH,02H INT 21H MOV DL,0DH ;从头开始 MOV AH,02H INT 21H RET CRLF ENDP
;------------------------------------------------------------接受数字函数 INPUT PROC NEAR MOV AX,0 PUSH AX
AGAIN1:MOV AH,01H ;键盘输入 INT 21H CMP AL,30H ;当输入不是数字的时候(如空格),跳出,一个数字输入完成, JL EXIT CMP AL,39H JG EXIT SUB AL,30H ;将ASCII码值转化为数值 MOV BL,AL MOV BH,0 POP AX CWD
36
IMUL TEN ;将已有的数乘10,加上新输入的数 ADD AX,BX PUSH AX JMP AGAIN1 EXIT: POP AX RET INPUT ENDP
DISPLAY PROC NEAR MOV CX,10000D ;DIVIDE BY 10000 CALL DEC_DIV MOV CX,1000D ;DIVIDE BY 1000 CALL DEC_DIV MOV CX,100D ;DIVIDE BY 100 CALL DEC_DIV MOV CX,10D ;DIVIDE BY 10 CALL DEC_DIV MOV CX,1D ;DIVIDE BY 1 CALL DEC_DIV RET ;RETURN FROM BINIDEC
DEC_DIV PROC NEAR ; ;--------从 位取出数字显示 MOV AX,BX ;NUMBER LOW HALF MOV DX,0 ;ZERO OUT HIGH HALF DIV CX ;DIVIDE BY CX MOV BX,DX ;REMAINDER INTO BX MOV DL,AL ;QUOTIENT INTO DL ;PRINT THE CONTENTS OF DL ON SCREEN ADD DL,30H ;CONVERT TO ASCII MOV AH,2H ; DISPLAY FUNCTION INT 21H ;CALL DOS RET ;RETURN FROM DEC_DIV DEC_DIV ENDP
;;------------------------------------------------------------------ DISPLAY ENDP
CODE ENDS END START 2)实验步骤:同上
37
(三)模块化程序设计
模块化程序设计是指将一个较大的功能分解成几个独立功能的子模块,每个子模块独立编缉各自建立一个文件,通过单独的汇编生成各个独立的目标文件,然后由LINK 程序将各个目标文件链接在一起,形成一个完整的执行文件。
1)实验程序的设计思想及其实现功能 程序实现键盘输入十进制数,以十六进制数形式在屏幕上显示的功能。程序分成两个模块,模块A为主程序,负责从键盘输入一个十进制数,处理后存入指定内存单元。模块B主要实现屏幕提示和将十六进制数转换及显示的功能。
实验程序参见教科书“微型计算机原理及应用”(吴宁主编)P185页上 模块化程序设计例1。 EXTRN PROMPT:FAR,BINHEX:FAR PUBLIC DEC_NUM,KEY_IN
SSEG SEGMENT PARA STACK 'STACK' DB 100 DUP(?) SSEG ENDS DSEG1 SEGMENT DEC_NUM DW ? DSEG1 ENDS CSEG1 SEGMENT ASSUME CS:CSEG1,DS:DSEG1 START: MOV AX,DSEG1 MOV DS,AX PUSH DS
JMP FAR PTR PROMPT KEY_IN: CALL DECBIN MOV DEC_NUM,BX CALL FAR PTR BINHEX
38
MOV AH,4CH INT 21H
DECBIN PROC NEAR MOV BX,0
GETCHAR:MOV AH,1 INT 21H SUB AL,30H JL EXIT CMP AL,09H JG EXIT MOV AH,0 XCHG AX,BX MOV CX,0AH MUL CX XCHG AX,BX ADD BX,AX JMP GETCHAR CALL CRLF EXIT: RET
DECBIN ENDP
;----------------------------------------------------------- 跳到下一行 CRLF PROC NEAR MOV DL,0AH ;换行 MOV AH,02H INT 21H MOV DL,0DH ;从头开始 MOV AH,02H INT 21H RET CRLF ENDP
CSEG1 ENDS END START
EXTRN DEC_NUM:WORD,KEY_IN:FAR PUBLIC PROMPT,BINHEX
SSEG SEGMENT PARA STACK 'STACK' DB 200 DUP(?)
39
SSEG ENDS DSEG2 SEGMENT
MSG DB 'PLEASE INPUT:$' DSEG2 ENDS CSEG2 SEGMENT PARA ASSUME CS:CSEG2,DS:DSEG2 PROMPT: MOV AX,DSEG2 MOV DS,AX LEA DX,MSG MOV AH,09H INT 21H POP DS
JMP FAR PTR KEY_IN
BINHEX PROC FAR CALL CRLF
MOV BX,DEC_NUM MOV CH,04H ROTATE:
MOV CL,04H ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,07H PRINTIT:
MOV DL,AL MOV AH,02H INT 21H DEC CH JNZ ROTATE RET
BINHEX ENDP
;----------------------------------------------------------- 跳到下一行 CRLF PROC NEAR MOV DL,0AH ;换行 MOV AH,02H INT 21H MOV DL,0DH ;从头开始
40
MOV AH,02H INT 21H RET CRLF ENDP
CSEG2 ENDS END
2) 实验步骤:
(1) 输入模块A程序和模块B程序,各产生一个文件。 (2) 汇编两个程序生成两个目标文件。
(3) 用LINK 文件名1+文件名2 命令链接为一个可执行文件。 (4) 运行程序,输入不同的十进制数,观察结果。
五、试验报告要求
写出(二)1、2、3自行设计的采用DOS功能调用设计源程序的程序清单。
41
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库东华微机实验aaa(8)在线全文阅读。
相关推荐: