汇编语言设计-实验三

1、将 BX 中的无符号数以二进制的形式输出。

S1 SEGMENT STACK
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS
	
S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV BX,23 ;修改BX的值
	MOV CX,16
L1: ROL BX,1
	JC ONE ;检测CF,若为1,则跳转
	MOV DL,30H
	JMP DISP
ONE:MOV DL,31H
DISP:MOV AH,2
	INT 21H
	LOOP L1
	
	MOV AH,4CH
	INT 21H
MAIN ENDP

S3 ENDS 
	END MAIN


2、将 BX 中的无符号数以八进制的形式输出。

S1 SEGMENT STACK ;堆栈段
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS

S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV BX,23 ;修改BX的值
	MOV CX,5
L1:	PUSH CX	;保护现场
	MOV CX,3 
	ROL BX,CX ;左移三位
	MOV DL,BL
	AND DL,7
	ADD DL,30H ;转化为数字输出
DISP:MOV AH,2
	INT 21H
	POP CX
	LOOP L1
	
	MOV AH,4CH
	INT 21H
MAIN ENDP
S3 ENDS 
	END MAIN


3、将 BX 中的无符号数以十六进制的形式输出。

;十六进制
S1 SEGMENT STACK ;堆栈段
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS

S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	LEA SP,TOP

	MOV BX,23 ;修改BX的值
	MOV CX,4
L1:	PUSH CX	;保护现场
	MOV CL,4 ;仅能用CL
	ROL BX,CL ;左移四位
	MOV DL,BL
	AND DL,0FH
	
	CMP DL,9
	JBE L2
	ADD DL,37H ;将字母转化为A=10,转化为字符A
	JMP DISP
L2: ADD DL,30H ;转化为数字输出
DISP:MOV AH,2
	INT 21H
	POP CX
	LOOP L1
	
	MOV AH,4CH
	INT 21H
MAIN ENDP
S3 ENDS 
	END MAIN


4、将 BX 中的无符号数以十进制的形式输出。

S1 SEGMENT STACK ;堆栈段
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS

S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	LEA SP,TOP ;初始化栈
	
	MOV BX,23 ;初始化BX
	XOR CX,CX
	MOV AX,BX ;为除法做准备
L1:	MOV DX,0 ;初始化DX为0
	MOV SI,10 
	DIV SI ;DX,AX/SI(字操作),余数在DX中
	PUSH DX
	INC CX ;CX++,统计位数
	CMP AX,0
	JNE L1
L2:	POP DX
	ADD DL,30H
	MOV AH,2
	INT 21H
	LOOP L2
	
	MOV AH,4CH
	INT 21H
MAIN ENDP
S3 ENDS 
	END MAIN


5、将 BX 中的有符号数输出(针对十进制而言)。

;有符号的十进制输出
S1 SEGMENT STACK
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS
	
S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	MOV SP,TOP ;段初始化
	
	MOV BX,-9623 
	XOR CX,CX
	MOV AH,0
	CMP BX,0
	JGE L1 ;当BX大于0时,跳转
	MOV DX,'-'
	MOV AH,2
	INT 21H
	NEG BX ;取补码
	
	
L1: MOV AX,BX
	MOV DX,0
	MOV SI,10
	DIV SI
	PUSH DX
	INC CX
	MOV BX,AX ;把商放入BX
	CMP AX,0
	JNE L1
	
L2: POP DX
	ADD DL,30H
	MOV AH,2
	INT 21H
	LOOP L2
	
	MOV AH,4CH
	INT 21H
MAIN ENDP
S3 ENDS 
	END MAIN


6、教材第五章的习题 5.1-5.3。

5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

S1 SEGMENT STACK
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS
	
S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	MOV SP,TOP ;段初始化
	
L1:	MOV AH,1
	INT 21H
	
	CMP AL,0DH
	JE L2 ;若为回车,直接退出
	
	CMP AL,61H ;小于a直接输出
	JB L3
	CMP AL,6AH ;大于z直接输出
	JA L3
	SUB AL,20H ;小写转大写
	
L3: MOV DL,AL
	MOV AH,2
	INT 21H
	JMP L1
	
L2:	MOV AH,4CH
	INT 21H
MAIN ENDP

S3 ENDS 
	END MAIN


5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显
示这三个字符。

S1 SEGMENT STACK
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS
	
S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	MOV SP,TOP ;段初始化
	
L1:	MOV AH,1
	INT 21H
	
	CMP AL,'a'
	JB L1
	CMP AL,'z'
	JA L1
	
	MOV BL,AL 
	DEC BL ;前导字符
	
	MOV BH,AL
	INC BH ;后续字符
	
	MOV CL,AL ;保护AL
	
	MOV AH,2
	MOV DL,BL
	INT 21H ;输出前导
	MOV DL,CL
	INT 21H ;输出当下
	MOV DL,BH
	INT 21H ;输出后续
	
	MOV AH,4CH
	INT 21H
MAIN ENDP
S3 ENDS 
	END MAIN


5.3 将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别放在 AL、BL、
CL 和 DL 中。

;用了INT 21H功能就会改变AX的值,随机改变
S1 SEGMENT STACK
	DW 30H DUP(?)
TOP LABEL WORD
S1 ENDS
	
S3 SEGMENT 
	ASSUME CS:S3,SS:S1
MAIN PROC FAR
	MOV AX,S1
	MOV SS,AX
	MOV SP,TOP ;段初始化
	
	MOV AX,8722
	MOV DX,AX ;转存到DX中,因为最先将高四位存到AL中
L1: MOV AL,DH ;将DX的高八位放到AH中
	MOV CL,4
	SHR AL,CL ;右移四位
	AND AL,0FH ;清除低四位以外的值

	MOV BL,DH ;将DX的高八位放到BL中,然后取低四位
	AND BL,0FH 
	
	PUSH DX
	SHR DX,CL ;将DX右移四位
	AND DX,0FH 
	MOV CL,DL
	
	POP DX
	AND DX,0FH ;直接取低四位
	
	MOV AH,4CH
	INT 21H
	;输出
MAIN ENDP
S3 ENDS 
	END MAIN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值