第4周作业

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
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值