MOV AX, FIRST ADD AX, SECOND MOV FIRST, AX MOV AX, FIRST+2 ADC AX, SECOND+2 MOV FIRST+2, AX
2.有两组50个字节的数据,分别放在自FIRST和SECOND开始的存储区中,试比较两组数据是否相同,若相同则0->AL,否则FFH->AL. • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
MOV SI, OFFSET FIRST MOV DI, OFFSET SECOND MOV CX, 50 P: MOV AL, [SI] CMP AL, [DI] JZ NEXT MOV AL, 0FFH JMP STOP NEXT: INC SI INC DI DEC CX JNZ P MOV AL, 0 STOP: HLT
3.设在AX和BX中分别存有用组合BCD码表示的4位十进制数,编写程序段将两个数相加,结果存入AX中。 ADD AL, BL DAA MOV CL, AL MOV AL, AH ADC AL, BH DAA MOV AH, AL MOV AL, CL
4.将从DATA1开始的100个字节的数据传送到从DATA2开始的存储区中。 MOV SI, OFFSET DATA1 MOV SI, OFFSET DATA2 MOV CX, 64H CLD PL1: MOVSB DEC CX
• • • • • • • • • • • • • • • • • • • • • • • • •
JNZ PL1 HLT
5.比较存储器中的两串数是否相同,如完全相同则AL=0,否则AL=FFH MOV SI, OFFSET DATA1 MOV DI, OFFSET DATA2 CLD
MOV CX, 64H REPZ CMPSB JZ EQQ MOV AL, 0FFH JMP STOP EQQ: MOV AL, 0 STOP: HLT 6.
在DATA1开始的存储区中存放了100个8位无符号数,找出其中最大的数存入MAX 单元
MOV BX, OFFSET DATA1 MOV AL, [BX] MOV CX, 63H P1: INC BX CMP AL, [BX] JAE NEXT MOV AL, [BX] NEXT: DEC CX JNZ P1 MOV MAX, AL HLT
7.假设X为某值且存放在寄存器AL中,求出函数值f(x)并存放在AH中。
1, X>0
f(x)= 0, X=0 -1,X<0 。。。
CMP AL,0
JGE BIG MOV AL,0FFH
JMP DOWN
JE DOWN MOV AL,1
BIG:
DOWN: MOV AH,AL 。。。
8.在某数据段中有10个字节的数组,要求从该数组中找出“$” 字符,然后将“$”前的所有数据相加,结果存入AX中。 •
MOV SI, OFFSET BUF
• • • • • • • • • • • • •
DEC SI MOV CX, 10 LL1: INC SI
CMP BYTE PTR[SI], ‘$’ LOOPNZ LL1
SUB SI, OFFSET BUF MOV CX, SI
MOV SI, OFFSET BUF MOV AX, 0 LL2: ADD AL, [SI] ADC AH,0 INC SI LOOP LL2 LL3: HLT
JZ LL3
8.统计负数个数并显示 DATA SEGMENT BUF DB COUNT EQU 20 NEGA DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA MOV DS,AX LEA SI,OFFSET
MOV CX,COUNT LP: MOV AL,[SI]
AND AL,AL
JNS NEXT INC DL
SI
START:MOV AX,DATA
2,-1,56……
MOV DL,0
NEXT:INC
LOOP LP
MOV NEGA,DL
OR DL,30H
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H END START
CODE ENDS
9. 若起始地址偏移量为2000H的内存单元存放有100个ASCII码字符,现给这些字符添加奇偶校验位(bit7),使每个字符中“1”的个数为偶数,在顺序输出到地址为100H的端口.
10.设数据段中有字节型单元NUMBER和FLAG,判断NUMBER与给定的X和Y的大小关系(X Assume cs: Code, ds: Data Beg: mov ax,data Mov ds,ax mov al, X Mov bl, Y Cmp NUMBER, X Jnc P1 Mov FLAG, 0FFH Jmp exit P1: cmp NUMBER, Y Ja P2 Mov FLAG, 00H Jmp exit P2: mov FLAG, 01H Exit: mov ah, 4ch Int 21h Code ends End Beg 11.计算1+2+3+…+100,并把和保存在SUM单元中。 .486 MOV SI, 2000H MOV CX, 100 MOV DX, 100H MOV AL, [SI] AND AL, 0FFH JPE NEXT1 OUT DX, AL INC SI LOOP NEXT2 MOV AH, 4CH INT 21H OR AL, 80H ;取字符串中字符送AL ;改变标志位 ;“1”的个数为偶,bit7不变 ;“1”的个数为奇,bit7变为1 NEXT2: NEXT1: DATA SEGMENT USE16 TT DB 1 SUM DW ? DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX , DATA MOV DS, AX MOV CX, 100 MOV AX, 0 START: ADD AX, TT INC TT LOOP START MOV SUM, AX MOV AH, 4CH INT 21H CODE ENDS END BEG 12.由键盘输入任意的两个十进制数,然后转换成对应的压缩BCD码的形式在屏幕上显示。 解答:.486 DATA SEGMENT USE16 BCD DB ? BUF DB 3 DB ? DB 3DUP(?) MESG1 DB ‘PLEASE INPUT :’,0DH,OAH,’$’ MESG2 DB ‘ERROR! NUMBER IS FROM 0 TO 9. PLEASE AGAIN!$’ DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX , DATA MOV DS, AX L1: MOV DX, OFFSET MESG1 MOV AH, 9 ;显示MESG1 INT 21H MOV AH, 0AH MOV DX, OFFSET BUF INT 21H ;输入字符串 MOV AL, BUF+2 CMP AL, 30H JC ERROR CMP AL, 3AH JC NEXT ;判断第一个数输入是否符合要求 ERROR: MOV DX, OFFSET MESG2 MOV AH, 9 INT 21H JMP L1 ;输入错误提示重新输入 NEXT: SUB AL, 30H SAL AL, 4 ;求出十位数字 MOV BCD, AL MOV AL, BUF+3 CMP AL, 30H JC ERROR CMP AL, 3AH JNC ERROR ;判断第二个数输入是否符合要求 SUB AL, 30H OR BCD, AL MOV AH, 4CH INT 21H CODE ENDS END BEG 13.由键盘输入两个十六进制数,转换成等值的十进制数后在屏幕上显示。 .486 CMPDISP MACRO NN ;用宏语句完成比较法二进制到十进制转换 LOCAL LAST,NEXT MOV DL, 0 LAST: CMP NUM, NN JC NEXT INC DL SUB NUM, NN JMP LAST NEXT: ADD DL, 30H MOV AH, 2 INT 21H ENDM DATA SEGMENT USE16 NUM DB ? BUF DB 3 DB ? DB 3DUP(?) DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX , DATA MOV DS, AX MOV AH, 0AH MOV DX, OFFSET BUF INT 21H MOV AL, BUF+2 CMP AL, 39H JNA L1 ;数字在0到9之间转 SUB AL, 07H ;数字在A到F之间 L1: SUB AL, 30H MUL 16 MOV NUM, AL MOV AL, BUF+3 CMP AL, 39H JNA L2 SUB AL, 07H L2: SUB AL, 30H ADD NUM, AL CMPDISP 100 CMPDISP 10 CMPDISP 1 MOV AH, 4CH INT 21H CODE ENDS END BEG ;NUM中为十六进制数的二进制表示 因篇幅问题不能全部显示,请点此查看更多更全内容