当前位置:文档之家› 第四章的作业

第四章的作业


;高位显示 0, 1
;低位显示 1, 0
;返回DOS
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
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
2. 编写程序,使用三种以上的方法,将存储器中2000H开始的地
址单元中的100字节数据复制到3000H开始的存储器地址单元中。
(2)利用交换指令 (1)利用通用传送指令MOV XCHG MOV SI,2000H MOV SI,2000H MOV DI,3000H MOV DI,3000H MOV CX,100 MOV CX,100 AA:MOV AL,[SI] AA: MOV AL,[SI] MOV [DI],AL XCHG [DI],AL INC SI INC SI INC DI INC DI LOOP AA LOOP AA HLT HLT
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)有进位。
INC 4[DATA3] JMP TJ5 TJ1: INC [DATA3] ;90分以上 JMP TJ5 TJ2: INC 1[DATA3] ;80~89分之间 JMP TJ5 TJ3: INC 2[DATA3] ;70~79分之间 JMP TJ5 TJ4: INC 3[DATA3] ;60~69分之间 TJ5: INC DI LOOP TJ0 MOV AH,4CH ;返回DOS INT 21H HLT CODE ENDS END
ZH1:MOV AL,[SI] ; 39H(ASCII)――90 AND AL,0FH SHL AL,4 MOV BL,AL INC SI MOV AL,[SI] AND AL,0FH ;33H(ASCII)――03 OR AL,BL ;变成93 MOV [DI],AL ;处理完数据存放到DATA2开始的单元 INC SI LOOP ZH1 TJ: POP CX TJ0: MOV AL,[DI] CMP AL,90 JNL TJ1 CMP AL,80 JNL TJ2 CMP AL,70 JNL TJ3 CMP AL,60 JNL TJ4
“A” ADD AL,06H JMP ZH2 ZH1:SUB AL,30H ZH2:MOV BL,AL ZH5:AND AL,0F0H SHR AL,4 ADD AL,30H MOV BH,AL MOV AL,BL AND AL,0FH ADD AL,30H MOV BL,AL
DISP:MOV DL,BH MOV AH,2 INC 21H MOV DL,BL MOV AH,2 INC 21H MOV AH,4CH INT 21H HLT CODE ENDS END
(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
(3)利用换码指令XLAT MOV BX,2000H (4)利用堆栈实现数据传送 MOV DI,3000H MOV SI,2000H MOV CX,100 MOV DI,3000H AA: XOR AL,AL MOV CX,50 XLAT AA: PUSH [SI] MOV [DI], AL POP [DI] INC SI INC BX I AA HLT HLT
例如:输入01H 输入0AH
输出01 输出10
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
START:PUSH DS MOV AX,DATA MOV DS,AX XOR CX,CX KEY:MOV SI,OFFSET DATA1 MOV AH,1 ;读取数据存放到AL(ASCII)中, INT 21H ; 39H,33H,实际上是93分 CMP AL,‘$’ ;是否是结束字符 JZ ZH INC CX ;数据数加1 MOV [SI],AL ;把数据存放到DATA1单元 INC SI ;修改指针 JMP KEY ZH:MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 SHR CX 1 ;实际数据数是输入的一半 PUSH CX
ZH:
CMP AL,3AH JL ZH1 SUB AL,30H
;比较输入的ASCII码 ;若为0~9 比如“ 1” ;若为A~F,需要进行调整 ;AL=10H ;AL=01H ;BL=10H ; AL=00H,10H ;AL=00H,01H ;AL=30H,31H ;暂存高位,BL=30H,31H ;AL=01H,10H ;AL=01H,00H ;AL=31H,30H ;暂存低位 ,BL=31H,30H
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. 将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上 显示。
相关主题