您的当前位置:首页正文

部分汇编程序解答

2024-02-16 来源:易榕旅网
1.有两个4字节数分别放在自FIRST和SECOND开始的存储区,低字节在低地址处,编一程序段将两数相加,将结果存入从FIRST开始的存储区。 • • • • • • •

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的大小关系(XY,则置FLAG=1,若NUMBERData segment NUMBER db ? FLAG db ? Data ends Code segment

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中为十六进制数的二进制表示

因篇幅问题不能全部显示,请点此查看更多更全内容