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 ; 恢复寄存器


发布评论