34H 03H 04H BUF BUF+1 BUF+2
方法二:
CODE SEGMENT
ASSUME CS:CODE
START:MOV AL,05H
CALL Liuweipei
MOV AH,4CH
INT 21H
Liuweipei PROC
CMP AL,10
JC K1
ADD AL,37H
JMP L2
K1: ADD AL,30H
L2: MOV DL,AL
MOV AH,2
INT 21H
RET
Liuweipei ENDP
CODE ENDS
END START
编程题
1.编一程序段将BUF 字节单元中的数拆成高低四位,并且将分离出的高四位和低四位分别放于BUF+1和BUF+2字节单元的低四位上。
D:\ZQL>type exp11.asm
DATA SEGMENT
BUF DB 34H,?,?
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,BUF MOV CL,4 SHR AL,CL MOV BUF+1,AL MOV AL,BUF AND AL,0FH MOV BUF+2,AL MOV AH,4CH
INT 21H
CODE ENDS
END START
2.编制一子程序,将AL 中一位十六进制数转换为对应的ASCII 码并用2号DOS 功能调用显示出来,输入参数:被转换的十六进制数已在AL 中。
方法一: D:\ZQL>type exp12.asm CODE SEGMENT ASSUME CS:CODE START:MOV AL,0DH CALL Liuweipei MOV AH,4CH INT 21H Liuweipei PROC CMP AL,10 JC K1 ADD AL,7 K1: ADD AL,30H MOV DL,AL MOV AH,2 INT 21H RET Liuweipei ENDP CODE ENDS END START 方法二:
MOV AL,BUF
MOV BUF+2,AL
AND BUF+2,0FH
MOV CL,4
SHR AL,CL
MOV BUF+1,AL
3.用字符串指令编制一程序段,把以DAT1为首地址的数据区中的50个字节数据依次传送到以DAT2为首地址的数据区中。要求:在程序中按地址递增方式进行数据传送。 CLD
MOV CX,50
LEA SI,DAT1
LEA DI,DAT2
REP MOVSB
4.在以Block 为首地址的字节单元中,存放了06计算(1)班的学生考试成绩。试编制一程序,利用学生的序号来查表得到该学生的成绩,设学生的序号在NUMBER 单元,查表结果存入RESULT 单元中。
DATA SEGMENT
Block DB X 1, X 2, X 3,……,X 50
NUMBER DB X
RESULT DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA BX, Block
MOV AL, NUMBER
XLAT
MOV RESULT, AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
5.在南昌市的湖坊乡,约有人口45000 ,试编写一程序统计一下该乡超过100岁以上的老人有多少,并将统计结果存放在SUM 单元中。
DATA SEGMENT
AGE DB 25,31,6,101,90,71,116, … CONT EQU $-AGE SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,CONT MOV BX,0 LOP: CMP AGE[BX],100 JB NEXT
INC SUM
相关知识见59面 和打印出的第5章第四
大题的第3小题一样!
NEXT: INC BX
LOOP LOP
MOV AH,4CH
INT 21H
CODE ENDS
END START
STRING D 0 A B C $ D ……
DI
6.设有DX:AX 构成一个32位数据,从AX 的低位(第0位)开始,逐位向高位和DX 置1,置1的个数由CX 的内容确定( 已知 CX<32 )。试编制一程序段,实现上述要求。
XOR AX,AX
XOR DX,DX CF D 15 DX D 0 CF D 15 AX LOP: STC RCL AX,1
RCL DX,1
LOOP LOP
7.编写程序段,用DOS 的1号功能调用通过键盘输入一字符,并判断输入的字符。如字符是“Y ”,则转向YES 程序段;如字符是“N ”,则转向NO 程序段;如果是其它字符,则转向DOS 功能调用,重新输入字符。(考生勿需写出源程序格式,只需写出与试题要求有关的指令序列) KEY:MOV AH,1
(YES 和NO 分别是两程序段入口处的标号) INT 21H
CMP AL,‘Y ’
JE YES
CMP AL,‘N ’
JE NO
JMP KEY
8. 在以STRING 为首地址的存储区域存放了一个字符串,串的长度为50,查找其中是否有
字符$,若有将SIGN 单元置1,反之,将SIGN 单元置0(只需写出有关的指令序列)
(1) 用比较条件转移指令实现。
(2)用重复操作前缀串搜索指令实现。
(1) MOV CX,50 (2) MOV CX,50
MOV BX,0 LEA DI,STRING
N: CMP STRING[BX],’$’ CLD
JZ DONE MOV AL,’$’
INC BX REPNE SCASB
LOOP N JZ DONE
MOV SIGN,0 MOV SIGN,0
JMP EXIT0 JMP EXIT0
DONE: MOV SIGN,1 DONE: MOV SIGN,1
EXIT0: HLT EXIT0: HLT
9. 从键盘接收一个4位十进制数据,并将其存入ASCII 缓冲区,若输入出错,则调用子程序输出出错信息,提示重新输入,试编写一程序完成上述功能。
DATA SEGMENT ASCII DB 4 DUP(?)
SIGN DB ‘Input error,Repeat! $’ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,ASCII MOV CX,4 NEXT: MOV AH,01H INT 21H CMP AL,30H JB DONE CMP AL,39H JA DONE MOV [SI],AL INC SI LOOP NEXT
MOV AH,4CH
INT 21H
源程序:
DATA SEGMENT M1 DB ×× M2 DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX MOV CX,8
MOV AL,M1
XOR AH,AH LOP: SAL AL,1 RCR AH,1 D 7 D 0
LOOP LOP M1: MOV M2,AH MOV AH,4CH D 7 D 0
INT 21H M2: CODE ENDS
END START
和打印出的第7章
程序设计题一样!
DONE: CALL OUTPUT
JMP NEXT
OUTPUT PROC PUSH CX LEA DX,SIGN MOV AH,09H INT 21H POP CX RET OUTPUT ENDP
CODE ENDS
END START
若输入:3456 ASCII 33H 34H 35H 36H SI
10.编写一完整源程序,将M1中
的二进制数按位倒排送M2中,即
M1第0位送M2第7位,M1第1
位送M2第6位,依次类推。
数据段如下: DATA SEGMENT M1 DB YY ;任一字节数 M2 DB ? DATA ENDS
1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1
11.在数据段中,WEEK 是星期一~星期日的英文缩写,DAY 单元中有数1~7(1 表示星期一,7表示星期日):
WEEK DB ‘MON ’, ‘TUE ’, ‘WED ’, ‘THU ’, ‘FRI ’, ‘SAT ’, ‘SUN ’ DAY DB X ; 数字1~7
试编写一源程序,根据DAY 的内容用单个字符显示功能调用(2号功能)去显示对应的英文缩写。
源程序:
DATA SEGMENT
WEEK DB ‘MON ’, ‘TUE ’, ‘WED ’, ‘THU ’, ‘FRI ’, ‘SAT ’, ‘SUN ’ DAY DB X
DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR BX,BX MOV BL,DAY DEC BL MOV AL,BL SAL BL,1
ADD BL,AL
MOV CX,3
12.试编制一程序段,用串操作指令STOSB 实现向DA 数据区依次相间存放字母字符A,B,
C,……J 和数字字符0~9,相间顺序是:A,0,B,1,C,2,…,I,8,J,9(设DA 数据区所在段已由ES 指向)
源程序: MOV AL ,‘A ’
MOV AH ,‘0’ LEA DI ,DA DA A MOV CX ,20 0 CLD B
LOP :STOSB; (DI) AL DI DI+1 1
INC AL C
XCHG AL ,AH 2
LOOP LOP ……
LOP: MOV DL,WEEK[BX]
MOV AH,02H
INT 21H
INC BX
LOOP LOP
MOV AH,4CH
INT 21H
CODE ENDS
END START
ES DI