汇编语言程序设计
通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。
;通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AH,07H ;07H键盘输入无回显
INT 21H
MOV BL,AL ;将输入AL的字符存入BL
CMP BL,60H ;判断是否为小写字母
JBE L2 ;<=若不是,跳转至结束
CMP BL,7AH ;判断是否为小写字母
JA L2 ;>若不是,跳转至结束
L1:
SUB AL,01H ;-前一位
MOV DL,AL
MOV AH,02H ;输出DL
INT 21H
ADD DL,01H ;+自己
INT 21H
ADD DL,01H ;+后一位
INT 21H
L2: MOV AH,4CH ;结束程序
INT 21H
CODE ENDS
END START
根据三个数比较,结果在终端上显示如下信息,0,1,2
;根据比较结果在终端上显示如下信息,0,1,2
DATA SEGMENT
ARRAY DW 3,1,2;16位初始数据
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV BX,DATA
MOV DS,BX ;初始化数据段段地址
MOV AX,[ARRAY];直接寻址
MOV BX,[ARRAY+2]
CMP AX,BX
JNE K1;AX!=BX
MOV CX,[ARRAY+4]
CMP AX,CX ;AX=BX
JNE S2;只有两个相同,相等直接下一条语句
MOV DL,32H ;三个相等
MOV AH,02H
INT 21H
JMP E;结束
K1:
CMP BX,CX
JE S2;只有两个相同
JNE S1;都不等
S1:
MOV DL,30H ;都不等
MOV AH,02H
INT 21H
JMP E;结束
S2:
MOV DL,31H ;两个相等
MOV AH,02H
INT 21H
JMP E ;结束
E:
MOV AH,4CH;退出程序
INT 21H
CODE ENDS
END START
从键盘上输入一个8位二进制数,在显示器上显示其相应的2位十六进制数。
;从键盘上输入一个8位二进制数,在显示器上显示其相应的2位十六进制数。
DATA SEGMENT
;
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 10 DUP(?);
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA ;初始数据段短地址
MOV DS,AX
MOV BL,0 ;保存输入8位
MOV CX,0008H ;输入8位
L1: MOV AH,01H
INT 21H
SUB AL,30H;转化为数值
SHL BL,01H;左移1
OR BL,AL
DEC CX ;自减
JNZ L1 ;ZF不等于0跳转
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
MOV CH,2;2位16进制
ROTATE:
MOV CL,4
ROL BL,CL;循环左移4位,先输出高位
MOV DL,BL
AND DL,0FH;高四位置零,取低四位
ADD DL,30H;转acsii码
CMP DL,39H
JBE PRINTIT
ADD DL,07H;大于跳到字母
PRINTIT:
MOV AH,02H
INT 21H
DEC CH ;自减
JNZ ROTATE
MOV DL,48H;H
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。
;要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。
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 BX,0;保存输入的4位16进制
MOV CH,4
L1:
MOV AH,01H;输入AL
INT 21H
;处理9<in<A,a<in
CMP AL,39H
JBE L2;<=9
SUB AL,07H;取a后
L2:
SUB AL,30H;acsii转
MOV CL,4
SHL BX,CL;左移4位,最低4为0
OR BL,AL;将输入保存到BX
DEC CH
JNE L1
MOV DL,0AH;回车
MOV AH,02
INT 21H
;测试BX
MOV CX,16
L3: SHL BX,1;左移
JNC L4 ;CF为0
MOV DL,'1'
MOV AH,02H
INT 21H
JMP L5;处理完0跳转循环
L4: MOV DL,'0'
MOV AH,02H
INT 21H;;处理完1直接循环
L5: LOOP L3;循环
MOV AH,4CH
INT 21H
CODES ENDS
END START
从键盘上输入一个8位二进制数,在显示器上显示其相应的2位十六进制数。
;从键盘上输入一个8位二进制数,在显示器上显示其相应的2位十六进制数。
DATA SEGMENT
;
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 10 DUP(?);
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA ;初始数据段短地址
MOV DS,AX
MOV BL,0 ;保存输入8位
MOV CX,0008H ;输入8位
L1: MOV AH,01H
INT 21H
SUB AL,30H;转化为数值
SHL BL,01H;左移1
OR BL,AL
DEC CX ;自减
JNZ L1 ;ZF不等于0跳转
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
MOV CH,2;2位16进制
ROTATE:
MOV CL,4
ROL BL,CL;循环左移4位,先输出高位
MOV DL,BL
AND DL,0FH;高四位置零,取低四位
ADD DL,30H;转acsii码
CMP DL,39H
JBE PRINTIT
ADD DL,07H;大于跳到字母
PRINTIT:
MOV AH,02H
INT 21H
DEC CH ;自减
JNZ ROTATE
MOV DL,48H;H
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
通过键盘接收一个个位数N,然后显示N个字母‘$’。
;通过键盘接收一个个位数N,然后显示N个字母‘$’。
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AH, 01H;输入保存到al,回显
INT 21H
MOV CL, AL
SUB CL, 30H;循环cx
MOV CH, 00H
L1: MOV DL, '$'
MOV AH, 02H
INT 21H
LOOP L1
MOV AH, 4CH
INT 21H
CODE ENDS
END START
用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。
;用15行*16列的表格形式显示ASCII码为10H-FFH的所有字符。
DATAS SEGMENT
;
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES
START:
MOV BL,10H
MOV CH,15;行
J1: MOV CL,16;列
J2: MOV DL,BL;输出
MOV AH,02H
INT 21H
INC BL;值自加
DEC CL;列自减
JNZ J2
MOV DL,0DH;回车
INT 21H
MOV DL,0AH;换行
INT 21H
;一行结束
DEC CH;行自减
JNZ J1
MOV AH,4CH
INT 21H
CODES ENDS
END START