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 START
2、编写子程序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
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
根据以上数据定义,完成下列题目:
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 START
4、 利用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 START
5、利用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 START
6、编写子程序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 START
7、利用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