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
1254

被折叠的 条评论
为什么被折叠?



