1.试分析下列程序段 ADD AX, BX JNC L2 SUB AX, BX JNC L3 JMP SHORT L5 如果AX、BX的内容给定如下: AX BX (1)14C6H 80DCH (2)B568H 54B7H 问该程序在上述情况下执行后,程序转向何处? 解 (1)转向L2 因为(AX)+(BX)没有进位。 (2)转向L5 因为(AX)+(BX)=0A1FH,有进位。 然后(AX)-(BX)有进位
1.试分析下列程序段: ADD AX,BX JNC L2 SUB AX,BX JNC L3 JMP SHORT L5 如果AX、BX的内容给定如下: AX BX (1)14C6H 80DCH (2)B568H 54B7H 问该程序在上述情况下执行后,程序转向何处? 解: (1)转向L2 因为(AX)+(BX)没有进位。 (2)转向L5 因为(AX)+(BX)= 0A1FH,有进位。 然后(AX)-(BX)有进位
2.编写程序,使用三种以上的方法,将存储器中2000H开始的地 址单元中的100字节数据复制到3000H开始的存储器地址单元中。 (1)利用通用传送指令MoV、(2)利用交换指令 XCHG MOV SI, 2000H MOV SI, 2000H MOV DI, 3000H MOV DI, 3000H MOV CX, 100 MOV CX, 100 AA: MOV AL, [] MOV [DI],AL AA:MOAL,[S门 XCHG[D巧,AL INC SI ING INC SI C DI INC DI LOOP AA LOOP AA HLT HLT
2. 编写程序,使用三种以上的方法,将存储器中2000H开始的地 址单元中的100字节数据复制到3000H开始的存储器地址单元中。 (1)利用通用传送指令MOV MOV SI,2000H MOV DI,3000H MOV CX,100 AA:MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP AA HLT (2)利用交换指令 XCHG MOV SI,2000H MOV DI,3000H MOV CX,100 AA: MOV AL,[SI] XCHG [DI],AL INC SI INC DI LOOP AA HLT
(3)利用换码指令XLAT MOV BX, 2000H MOV DI,3000H(4)利用堆栈实现数据传送 MOV CX 100 MoVS工,2000H MOV DI, 3000H AA: XOR ALAL XLAT MOV CX 50 MOV [DIL, AL AA: PUSH ISII POP [DI] INC BX INC SI INC SI INcD工 INCD工 LOOP AA INcD工 LOOP AA HLT HLT
(3)利用换码指令XLAT MOV BX,2000H MOV DI,3000H MOV CX,100 AA: XOR AL,AL XLAT MOV [DI], AL INC BX INC DI LOOP AA HLT (4)利用堆栈实现数据传送 MOV SI,2000H MOV DI,3000H MOV CX,50 AA: PUSH [SI] POP [DI] INC SI INC SI INC DI INC DI LOOP AA HLT
(5)利用串操作指令 REP MOVSB MoVS工,2000H MOV DI, 3000H MOV CX, 100 CLD DF=0,SI、DI自动+1 REP MOVSB HLT 3在DATA开始的4个单元中存放着一个32位数,求出其中的“1” 的个数,并存入 COUNT单元中。 DATA SEGMENT DATAI DB FEH, 86H, 7CH, 35H COUNT DB OOH DATA ENDS STACK SEGMENT DB 100 DUP(? STACK ENDS
(5)利用串操作指令REP MOVSB MOV SI,2000H MOV DI,3000H MOV CX,100 CLD ;DF=0,SI、DI自动+1 REP MOVSB HLT 3. 在DATA开始的4个单元中存放着一个32位数,求出其中的“1” 的个数,并存入COUNT单元中。 DATA SEGMENT DATA1 DB FEH,86H,7CH,35H COUNT DB 00H DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS
CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV MOV SI, OFFSET DATAI MOV BX, SI MOV DX,SI+2 MOV X,16 XOR AL, AL LPI RCR DX INC LP2 INC AL LP2 LOOP LPI MOV CX.16 LP3 RCR BC JNC LP4 INC AL LP4 LOOP LP3 MOV COUNT, AL MOV AH, 4CH INT 21H HLT
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SI,OFFSET DATA1 MOV BX,[SI] MOV DX,[SI+2] MOV CX,16 XOR AL,AL LP1: RCR DX JNC LP2 INC AL LP2: LOOP LP1 MOV CX,16 LP3: RCR BC JNC LP4 INC AL LP4: LOOP LP3 MOV COUNT,AL MOV AH,4CH INT 21H HLT
6.下段程序完成后,AH等于什么? IN AL, SFH TEST AL, 80H JZ LI MOV AH, O JMP STOP LI: MOV AH, OFFH STOP: HLT 如果地址为5FH的外设输入到AL中的数据的最高位=1,则 (AH)=0,否则,(AH)=0FFH 13.将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上 显示
6. 下段程序完成后,AH等于什么? IN AL,5FH TEST AL,80H JZ L1 MOV AH,0 JMP STOP L1:MOV AH,0FFH STOP:HLT 如果地址为5FH的外设输入到AL中的数据的最高位=1,则 (AH)= 0,否则,(AH)= 0FFH。 13. 将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上 显示
例如:输入01H输出01 输入0AH输出10 DATA SEGMENT DATAI DB 10 DUP (?) DATA2 DB 10 DUP (? DATA ENDS STACK SEGMENT DB 100 DUP (? STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK START: PUSH DS MOVAX, DATA MOV DS, AX KEY: MOV ah, 1 INT 21H
DATA SEGMENT DATA1 DB 10 DUP(?) DATA2 DB 10 DUP(?) DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:PUSH DS MOV AX,DATA MOV DS,AX KEY:MOV AH,1 INT 21H 例如:输入01H 输出01 输入0AH 输出10
ZH: CMP AL,3AH;比较输入的ASC码 JL ZHI 若为0~9比如“1” SUBAL,30H;若为A~F,需要进行调整 A ADD AL, 06H AL=1OH JMPZH2 ZHI: SUBAL, 30H AL=OIH ZH: MOVBL AL BL=IOH ZH5: AND ALg OFOH AL=00H, 10H SHR AL, 4 AL=00H, 01H ADD AL, 30H ;AL=30H,31H MOV BH, AL 暂存高位,BL=30H,3IH MOV AL, BL AL=01H,10H AND AL, OFH AL=01H,00H ADD AL, 30H ;AL=31H,30H MOV BL, AL ;暂存低位,BL=31H,30H
ZH: CMP AL,3AH ;比较输入的ASCII码 JL ZH1 ;若为0~9 比如“ 1” SUB AL,30H ;若为A~F,需要进行调整 “A” ADD AL,06H ;AL=10H JMP ZH2 ZH1:SUB AL,30H ;AL=01H ZH2:MOV BL,AL ;BL=10H ZH5:AND AL,0F0H ; AL=00H,10H SHR AL,4 ;AL=00H,01H ADD AL,30H ;AL=30H,31H MOV BH,AL ;暂存高位,BL=30H,31H MOV AL,BL ;AL=01H,10H AND AL,0FH ;AL=01H,00H ADD AL,30H ;AL=31H,30H MOV BL,AL ;暂存低位,BL=31H,30H
DISP: MOVDL,BH;高位显示0, MOVAH, 2 INC 21H MOVDL, BL ;低位显示1,0 MOVAH, 2 INC 21H MOVAH,4CH;返回DOS INT 21H HLT CODE ENDS END
DISP:MOV DL,BH ;高位显示0, 1 MOV AH,2 INC 21H MOV DL,BL ;低位显示1, 0 MOV AH,2 INC 21H MOVAH,4CH ;返回DOS INT 21H HLT CODE ENDS END
22.编程序统计学生的数学成绩,分别归类90~99分,80~89分, 70~79分,60~69分及60分以下,并将各段的人数送入内存单 元中。 DATA SEGMENT DATAl DB200DUP(?);输入的数据,以ASCI形 DATA2 DB100DUP(?);处理后的数据存放 DATA3 DB10DUP(?);统计各分数段的个数 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT aSSUME CS: CODE, DS: DATA, SS: STACK
22. 编程序统计学生的数学成绩,分别归类90~99分,80~89分, 70~79分,60~69分及60分以下,并将各段的人数送入内存单 元中。 DATA SEGMENT DATA1 DB 200 DUP(?) ;输入的数据,以ASCII形式存放 DATA2 DB 100 DUP(?) ;处理后的数据存放 DATA3 DB 10 DUP(?) ;统计各分数段的个数 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK