微机原理15
- 格式:pdf
- 大小:87.03 KB
- 文档页数:2
4-16
在内存首地址为TABL的存储区域中,存放着100个补码字数据,试编写程序把出现次数最多的数及其出现次数分别存放在寄存器AX和CX中DSEG SEGMENT ;定义存放的数据段
TABL DW 100 DUP(?)
DATA DW ?
CONT DW 1
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG ES: DSEG
START : MOV AX,DSEG
MOV DS, AX
MOV ES, AX
BEGIN: MOV BX, 100
MOV DI ,0
NEXT: MOV DX,0
MOV SI,0
MOV AX,TABL[DI]
MOV CX,100
CMPA: CMP TABL[SI],AX ;将AX中存放的数据与TABL[SI]所指向的数据进行比较
JNE AR;若不相同则跳转到AR代码段
INC DX;相同则使DX+1
AR: ADD SI,2
LOOP CMPA ;重复执行CMPA代码段判断数据是否出现重复
CMP DX,CONT
JLE DONE;判断二者大小,决定是否跳转至DONE代码段
MOV CONT,DX ;若不跳转,则将DX中的数据转存至CONT中
MOV DATA,AX
DONE: ADD DI,2
DEC BX ;循环计数器减一
JNZ NEXT
MOV CX,CONT
MOV AX,DATA
CSEG ENDS
END START
4-17
有一个首地址为MEN的100个字的数组,试编写程序删除数组中所有为0的项,并将后续项向前移位,最后将数组的剩余部分补上0
DESG SEGMENT
MEN DW 100 DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS:DSEG
START : MOV AX, DSEG
MOV DS,AX
BEGIN: MOV SI,(100-1)×2
MOV BX, 0
MOV CX, 100
CMPA:MOV AX,[BX
AND AX,AX
JZ CONA ;结果相等时转移至CONE代码段中
ADD BX,2
LOOP CMPA
JMP FINISH
CONA: MOV DI,BX
CONB:CMP DI,SI
JAE NMOV ;结果不低于时转移
MOV AX,MEM[DI+2]
MOV MEM[DI],AX
ADD DI,2
JMP CONB ;无条件跳转
NMOV: MOV WORD PTR[SI],0;将后面的空位补0
LOOP CMPA
FINISH: HLT ;使 CPU进入进入暂停状态
CSEG ENDS
END START。