RET
20. 编写程序,把ARRAY1和ARRAY2中20个字节数分别相加,结果放到TABLE中。
(1) 假定数据为无符号数,如果结果大于255则结果为255。 (2) 假定结果为带符号数,如果有溢出则保存结果为0。 答:(1)
DATA SEGMENT
ARRAY1 DB 20 DUP(?) ARRAY2 DB 20 DUP(?) TABLE DB 20 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,20 MOV SI,0
AGAIN:MOV AL,ARRAY1[SI] ADD AL,ARRAY2[SI] JC LABEL1
MOV TABLE[SI],AL JMP LABEL2
LABEL1:MOV TABLE[SI],255 LABEL2:INC SI
LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS
END START
(2)
DATA SEGMENT
ARRAY1 DB 20 DUP(?) ARRAY2 DB 20 DUP(?) TABLE DB 20 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,20 MOV SI,0
AGAIN:MOV AL,ARRAY1[SI] ADD AL,ARRAY2[SI] JO LABEL1
MOV TABLE[SI],AL JMP LABEL2
LABEL1:MOV TABLE[SI],0 LABEL2:INC SI
LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS
END START
21. 字符串ATR1保存着100个字节的ASCII码,试编写一个程序统计该字符串
中空格(20H)的个数。
答: DATA SEGMENT
ATR1 DB 100 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,100 XOR DI,DI XOR SI,SI
COMP:CMP ATR1[SI],20H INC SI JNE NEXT INC DI NEXT:LOOP COMP MOV AH,4CH INT 21H CODE ENDS END START
第4章 顺序、分支与循环程序设计
1.试编写一个程序实现将从键盘输入的小写字母用大写字母形式显示出来。 答: DATA SEGMENT
STRMESSAGE DB “请输入小写字符”,0DH,0AH,’$’ DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX
MOV DX,OFFSET STRMESSAGE MOV AH,9H INT 21H
MOV AH,1 INT 21H MOV DL,AL SUB DL,20H MOV AH,2 INT 21H EXIT:MOV AH,4CH INT 21H CODE ENDS
END START 2.在内存BUFFER单元中定义有10个16位数,试寻找其中的最大值及最小值,并放在指定的存储单元MAX和MIN中。 答: DATA SEGMENT
BUFFER DW 10 DUP(?) MIN DW ? MAX DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX
MOV BX,OFFSET BUFFER MOV AX,[BX] MOV DX,[BX] MOV SI,0 MOV CX,10
MM:MOV DI,[BX+SI] CMP AX,DI JB T1 JMP T2 T1:CMP DX,DI JB T11 JMP T21 T11:MOV DX,DI T21:JMP ENT T2: MOV AX,DI ENT:ADD SI,2 LOOP MM MOV MAX,DX MOV MIN,AX MOV AH,4CH INT 21H CODE ENDS
END START
3.统计字型变量DATBUF中有多少位0,多少位1,并分别记入COUNT0和COUNT1中。
答: DATA SEGMENT
DATBUF DW 1234H COUNT0 DB ? COUNT1 DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,DATBUF AGAIN:CMP BX,0 JE EXIT SHL BX,1 JNC ZERO INC COUNT1 JMP AGAIN ZERO:INC COUNT0 JMP AGAIN EXIT:MOV AH,4CH INT 21H CODE ENDS
END START
4.在BUFFER开始的单元中存放着一个字符串,请判断该字符串中是否存在数字,如有则将X单元置1,否则置0。 答: DATA SEGMENT
BUFFER DB ‘JAVA2COMPUTER’ N=$-BUFFER X DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX CLD
MOV CX,N XOR SI,SI
AGAIN:CMP BUFFER[SI],39H JA NEXT CMP AL,30H JB NEXT MOV X,1 JMP EXIT
NEXT:INC SI
LOOP AGAIN MOV X,0 EXIT:MOV AH,4CH INT 21H CODE ENDS
END START
5.设在变量单元A1、A2、A3、A4中存放4个数,试编程实现将最大数保留,其余3个数清零的功能。
答: DATA SEGMENT A1 DB 3 A2 DB 7 A3 DB 9 A4 DB 8 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,0 MOV CX,3
MOV AL,A1[SI] MOV DI,0 NEXT:INC SI
CMP AL,A1[SI] JNB NEXT1 MOV AL,A1[SI] MOV A1[DI],0 MOV DI,SI JMP NEXT2 NEXT1:MOV A1[SI],0 NEXT2:LOOP NEXT MOV AH,4CH INT 21H CODE ENDS
END START
6.已定义了两个整数变量A和B,试编写程序完成下列功能。
(1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中 (2) 若两个数均为奇数,则将两数均加1后存回原变量。 (3) 若两个数均为偶数,则两个变量均不改变。 答: DATA SEGMENT A DB 13H B DB 24H DATA ENDS