1.将 BX 中的无符号数以二进制的形式输出。
CODES SEGMENT
ASSUME CS:CODES
MAIN PROC FAR
MOV CX,16
L1:
ROL BX,1
MOV DL,30H
ADC DL,0
MOV AH,2
INT 21H
LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
2.将 BX 中的无符号数以八进制的形式输出。
STACKS SEGMENT
DW 30H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
ROL BX,1
MOV DL,0
ADC DL,30H
MOV AH,2
INT 21H
MOV CX,5;五次大移
L1:
PUSH CX
MOV CL,3
ROL BX,CL;三次小移
MOV DL,BL;低八位
AND DL,7;屏蔽高5位
ADD DL,30H
MOV AH,2
INT 21H
POP CX
LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
3.将 BX 中的无符号数以十六进制的形式输出。
STACKS SEGMENT
DW 30H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
MOV CX,4
L1:
PUSH CX
MOV CL,4
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,39H
JBE DISP
ADD DL,7
DISP:
MOV AH,2
INT 21H
POP CX
LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
4.将 BX 中的无符号数以十进制的形式输出。
STACKS SEGMENT
DW 30H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
XOR CX,CX
MOV AX,BX
L1:
XOR DX,DX
MOV SI,10
DIV SI
PUSH DX
INC 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
CODES ENDS
END MIAN
5.将 BX 中的有符号数输出(针对十进制而言)。
STACKS SEGMENT
DW 30H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
XOR CX,CX
CMP BX,0;判断是否为0
JNE L1
MOV DL,30H
MOV AH,2
INT 21H
JMP L5
L1:
JNS L4;判断为正则转
MOV DL,'-'
MOV AH,2
INT 21H
MOV AX,BX
NEG AX
L2:
XOR DX,DX
MOV SI,10
DIV SI
PUSH DX
INC CX
CMP AX,0
JNE L2
L3:
POP DX
ADD DL,30H
MOV AH,2
INT 21H
LOOP L3
JMP L5
L4:
MOV AX,BX
JMP L2
L5:
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
6.教材第五章的习题 5.1-5.3。
5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。
DATAS SEGMENT
RLEN DB 0
DATAS ENDS
STACKS SEGMENT
DB 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
L1:
MOV AH,1
INT 21H
;输入判断
CMP AL,'a'
JB L1
CMP AL,'z'
JA L1
MOV CL,AL
;打印回车换行,
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,CL
SUB DL,20H
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
注意:
代码中注释打印换行还有个更简便的的方法,只需要在数据段中定义一个回车换行的字符串,利用九号功能输出打印即可,代码如下。(仔细查看九号功能的使用条件,下面代码中注释掉的语句是用于测试的。)
DATAS SEGMENT
;STR0 DB 'HE$'
STR1 DB 0DH,0AH,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
;LEA SI,STR0
;MOV DX,SI
;MOV AH,9
;INT 21H
LEA SI,STR1
MOV DX,SI
MOV AH,9
INT 21H
;LEA SI,STR0
;MOV DX,SI
;MOV AH,9
;INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
5.2编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显
示这三个字符。
DATAS SEGMENT
RLEN DB 0
DATAS ENDS
STACKS SEGMENT
DB 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
L1:
MOV AH,1
INT 21H
CMP AL,'a'
JB L1
CMP AL,'z'
JA L1
MOV CL,AL
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,CL
DEC DL
MOV AH,2
INT 21H
MOV DL,CL
MOV AH,2
INT 21H
MOV DL,CL
INC DL
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODES ENDS
END MAIN
5.3将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别放在 AL、BL、
CL 和 DL 中。
DATAS SEGMENT
;ax中的数据自己随便定义一个,或者可以搞个进制输入保存在ax中
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
XOR DX,DX
MOV DX,AX
MOV CL,4
ROL DX,CL
MOV AL,DL
AND AL,0FH
MOV DX,AX
ROL DX,CL
MOV BL,DL
AND BL,0FH
MOV DX,AX
ROL DX,CL
MOV CL,DL
AND CL,0FH
MOV DX,AX
ROL DX,CL
AND DL,0FH
MOV AH,4CH
INT 21H
CODES ENDS
END START