1、编写子程序output,将AX中的数以无符号十进制形式输出显示。(如果有入口参数或出口参数,请给出相应注释进行说明。)
DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 ;此处写主程序 MOV AX,123 ;入口参数 CALL OUTPUT ;call调用子程序 MOV AH,4CH INT 21H ;子程序 OUTPUT PROC PUSH BX ;此子程序需要使用寄存器BX,CX,DX,防止主程序中若使用这些寄存器,数被覆盖 PUSH CX PUSH DX MOV CL,10 MOV BH,1 REDIV: DIV CL PUSH AX CMP AL,0 JE PRINT ADD BH,1 MOV AH,0 JMP REDIV PRINT: CMP BH,0 JE OUTPUTOVER POP DX MOV DL,DH ADD DL,48 SUB BH,1 MOV AH,2 INT 21H JMP PRINT OUTPUTOVER: POP DX POP CX ;将原来压栈的主程序中的数弹出 POP BX ;注意顺序 先入后出 RET ;返回 OUTPUT ENDP CODES ENDS END START2、编写子程序input,从键盘输入数字字符(例如‘1’‘2’‘6’‘a’),在程序中得到对应的数值(126)。(如果有入口参数或出口参数,请给出相应注释进行说明。)
DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 ;此处写主程序 MOV AH,4CH INT 21H ;子程序 INPUT PROC ;输入功能 PUSH AX ;防止主程序中的数被覆盖 PUSH CX PUSH DX MOV DH,10 MOV BX,0 REMUL: MOV AH,1 INT 21H CMP AL,'0' JB NEXT CMP AL,'9' JA NEXT SUB AL,48 MOV CL,AL MOV CH,0 MOV AX,BX MUL DH ADD CX,AX MOV BX,CX JMP REMUL NEXT: POP DX POP CX ;将原来压栈的主程序中的数弹出 POP AX ;注意顺序 先入后出 RET INPUT ENDP CODES ENDS END START根据以上数据定义,完成下列题目: 3、利用1题中的子程序,将a2中的数据输出显示。 4、 利用1题中的子程序,将a3中的5个数据输出显示。 5、利用2题中的子程序,输入5个数据,存放到a4变量中。 6、编写子程序dispstr,将以叹号结尾的字符串输出显示。(如果有入口参数或出口参数,请给出相应注释进行说明。) 7、利用6题中的子程序,在主程序中将a5-a7中的字符串输出显示。
3、利用1题中的子程序,将a2中的数据输出显示。
DATAS SEGMENT ;此处输入数据段代码 a0 byte 5 a1 byte 12,125,6,234,123 a2 word 18 a3 word 12,5,6,567,123 a4 word 5 dup (?) a5 byte 'Please input 5 data:!' a6 byte '5 data before sort is:!' a7 byte '5 data after sort is:!' a8 byte 13,10,'!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 MOV SI,offset a2 ;得到a2第一个元素的偏移量 MOV AX,[SI] ;从内存中取数 CALL OUTPUT ;调用output MOV AH,4CH INT 21H ;把第一题的子程序ctrl c+ctrl v过来 CODES ENDS END START4、 利用1题中的子程序,将a3中的5个数据输出显示。
DATAS SEGMENT ;此处输入数据段代码 a0 byte 5 a1 byte 12,125,6,234,123 a2 word 18 a3 word 12,5,6,567,123 a4 word 5 dup (?) a5 byte 'Please input 5 data:!' a6 byte '5 data before sort is:!' a7 byte '5 data after sort is:!' a8 byte 13,10,'!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 MOV SI,offset a3 MOV DI,0 GETAGAIN: MOV AX,[SI] CALL OUTPUT ADD SI,2 ADD DI,1 CMP DI,5 JE MOVER JMP GETAGAIN MOVER: MOV AH,4CH INT 21H ;把第一题的子程序ctrl c+ctrl v过来 CODES ENDS END START5、利用2题中的子程序,输入5个数据,存放到a4变量中。
DATAS SEGMENT ;此处输入数据段代码 a0 byte 5 a1 byte 12,125,6,234,123 a2 word 18 a3 word 12,5,6,567,123 a4 word 5 dup (?) a5 byte 'Please input 5 data:!' a6 byte '5 data before sort is:!' a7 byte '5 data after sort is:!' a8 byte 13,10,'!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 MOV SI,offset a4 MOV DL,0 AGAIN: CALL INPUT MOV [SI],BX ADD SI,2 ADD DI,1 CMP DI,5 JE PRINT ;PRINT未写,跳出就行 JMP AGAIN MOV AH,4CH INT 21H ;把第二题的子程序ctrl c+ctrl v过来 CODES ENDS END START6、编写子程序dispstr,将以叹号结尾的字符串输出显示。(如果有入口参数或出口参数,请给出相应注释进行说明。)
DATAS SEGMENT ;此处输入数据段代码 a0 byte 5 a1 byte 12,125,6,234,123 a2 word 18 a3 word 12,5,6,567,123 a4 word 5 dup (?) a5 byte 'Please input 5 data:!' a6 byte '5 data before sort is:!' a7 byte '5 data after sort is:!' a8 byte 13,10,'!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 ;主程序 MOV SI,OFFSET A5 ;测试 CALL DISPSTR MOV AH,4CH INT 21H ;子程序 DISPSTR PROC PUSH AX ;防止主程序中的数被覆盖 REGET: MOV DL,[SI] CMP DL,'!' JE DISPSTROVER MOV AH,2 INT 21H ADD SI,1 JMP REGET DISPSTROVER: POP AX RET DISPSTR ENDP CODES ENDS END START7、利用6题中的子程序,在主程序中将a5-a7中的字符串输出显示。
DATAS SEGMENT ;此处输入数据段代码 a0 byte 5 a1 byte 12,125,6,234,123 a2 word 18 a3 word 12,5,6,567,123 a4 word 5 dup (?) a5 byte 'Please input 5 data:!' a6 byte '5 data before sort is:!' a7 byte '5 data after sort is:!' a8 byte 13,10,'!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX核心代码:
;此处输入代码段代码 MOV SI,offset a5 CALL DISPSTR MOV SI,offset a6 CALL DISPSTR MOV SI,offset a7 CALL DISPSTR MOV AH,4CH INT 21H ;把第六题的子程序ctrl c+ctrl v过来 CODES ENDS END START