IBM-PC汇编语言程序设计答案

49703100.doc - 28 - 作者:User

5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次

数最多的数及其出现次数分别存放于AX和CX中。 答:程序如下:

DSEG SEGMENT TABLE DW 100H DUP (?) ;数组中的数据是按增序排列的 DATA DW ? COUNT DW 0 DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DSEG MOV DS, AX ;给DS赋值

BEGIN: MOV CX, 100H ;循环计数器

MOV SI, 0

NEXT: MOV DX, 0

MOV AX, TABLE [SI]

COMP: CMP TABLE [SI], AX ;计算一个数的出现次数

JNE ADDR INC DX ADD SI, 2 LOOP COMP

ADDR: CMP DX, COUNT ;此数出现的次数最多吗?

JLE DONE

MOV COUNT, DX ;目前此数出现的次数最多,记下次数 MOV DATA, AX ;记下此数

DONE: LOOP NEXT ;准备取下一个数

MOV CX, COUNT ;出现最多的次数存入(CX) MOV AX, DATA ;出现最多的数存入(AX) RET

MAIN ENDP CSEG ENDS ;以上定义代码段 ;--------------------------------------------------------------------------

END START 5.15 数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放

在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 答:程序如下:

DSEG SEGMENT n EQU 100H ;假设n=100H M DW n DUP (?) DATA DW ? ;M+2n单元 ADDR DW ? ;M+2(n+1)单元 DSEG ENDS

;-------------------------------------------------------------------------- CSEG SEGMENT MAIN PROC FAR

ASSUME CS: CSEG, DS: DSEG

START: PUSH DS ;设置返回DOS

SUB AX, AX PUSH AX

MOV AX, DSEG

49703100.doc - 29 - 作者:User

MOV

BEGIN:

DS, AX ;给DS赋值

MOV CX, n ;循环计数器 LEA DI, M MOV AX, [DI] ;取第一个数 MOV ADDR, DI ;记下绝对值最大的数的地址 CMP AX, 0 ;此数是正数吗? JNS ZHEN ;是正数,即为绝

>>閻忕偞娲栫槐鎴﹀礂閵婏附鐎�<<
12@gma联系客服:779662525#qq.com(#替换为@)