2024年5月2日发(作者:)

1、在DS段中有一个从TABLE开始的由160个字符组成的链表,设计一个程序,实现对此

表进行搜索,找到第一个非0元素后,将此单元和下一单元清0。

解: MOV CX, SEG TABLE

MOV DS, CX ;将段地址送DS

MOV SI, OFFSET TABLE ;表偏移量送SI

MOV CX, 160 ;字节数

XOR AL, AL

NEXT: CMP AL, [SI]

JNE EXIT1

INC SI

LOOP NEXT

EXIT1: MOV [SI], AL

INC SI

MOV [SI], AL

2、试编写一个程序段,实现将BX中的数除以10,结果仍放在BX中。

解: MOV CL,0AH

MOV AX,BX

IDIV CL

MOV BX,AX

3、用串操作指令设计实现以下功能的程序段:首先将100H个数从2170H处搬到1000H处,

然后,从中检索相等于AL中字符的单元,并将此单元值换成空格符。

解: BUFF1 EQU 1000H

BUFF2 EQU 2170H

START: MOV SI,OFFSET BUFF2

LEA DI,BUFF1

MOV CX,100H

CYCLE: MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

LOOP CYCLE

ANOTHER:MOV DI,OFFSET BUFF1

MOV CX,100

CLD

AGE: SCASB

DEC CX

JZ FIN

JNZ AGE

JMP OVER

FIN: MOV [DI],20H

CMP CX,0

JNZ AGE

OVER: RET

4、用循环控制指令设计程序段,从60H 个元素中寻找一个最大值,结果放在AL中。

解: MOV SI, OFFSET DATA1 ; 将数据起始地址送SI

MOV CX, 5FH ; 有60H-1次循环

MOV AL, [SI] ; 将第一个元素放AL中

COMPARE: INC SI

CMP AL, [SI]

JL XCHMAX

JMP NEXT

XCHMAX: MOV AL, [SI]

NEXT: LOOP COMPARE

5、编程序将一个存储块的内容复制到另一个存储块,进入存储段时,SI中为源区起始地址

的偏移量,DI中为目的区起始地址的偏移量,CX中为复制的字节数。

解: CMP DI, SI ; 看源区和目的区的地址哪个高

JBE LOWER ; 如目的区地址底,则转移

STD 如目的区地址高,则设方向标志为1

ADD SI, CX ; 从最后一个字节开始复制

DEC SI ; 调整源区地址

ADD DI, CX

DEC DI ; 调整目的区地址

JMP MOVEM

LOWER: CLD ; 从第一个字节开始复制

MOVEM: REP MOVSB

6、编写程序实现对两个存储区中的字进行比较。如找到一对不同的字,则退出,此时 ,

ZF为0,DI 指向此字;如两个存储区中所有的字都相同,则退出程序时,CX中值为0,

ZF为1。

解: MATT: MOV SI, OFFSET SOURCE ; 源区首址

MOV DI, OFFSET TARGET ; 目的区首址

MOV CX, NUMBER

JCXZ EXIT ; 如CX为0,则结束

PUSH CX ; 保存有关寄存器

PUSH SI

PUSH DI

CLD ; 清方向标志

REPE CMPSW

JZ MATCH ; 比较

PUSHF ; ZF为1,则转移

SUB DI, 2 ; ZF为0,则DI指向次字

POPF

JMP EXIT ; 推出

MATCH: POP DI ; 恢复寄存器