1、 CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1CALL READINT ;输入X的值CMP AX, -2JGE L2 L1: SUB AX, 3 ;AXX-3 JMP DONE L2: CMP AX, 3 JG L3 MOV BX, AX ADD AX, AX ;AX2XAX4X ADD AX, BX ;AX5X ADD AX, 6 ;AX5X+6 L3: MOV AX, 2 ;AX2 DONE: LEA DX, MESS2CALL WRITEINT ;输出Y的值CALL
2、CRLF MOV AX, 4C00H INT 21H CODE ENDS END START4.14 编写程序,求10元素字数组LIST中绝对值最小的数,存入MIN单元。 DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18 MIN DW ? MINABS DW ? MOV AX, LIST MOV MIN, AX ;将数组第一个元素假设为绝对值最小的数MOV MINABS, 32767 ;最小的绝对值假设为32767LEA SI, LISTMOV CX, 10 AGAIN: MOV AX, SICMP AX, 0J
3、GE SKIP1NEG AX ;求绝对值 SKIP1: CMP AX, MINABS ;绝对值与假设的最小绝对值比较 JGE SKIP2 ;假设的绝对值较小,跳过 MOV MINABS, AX ;保存新的最小绝对值MOV AX, SI ;取出新的绝对值最小的数MOV MIN, AX ;保留新的绝对值最小的数 SKIP2: ADD SI, 2 LOOP AGAINMOV AX, 4C00H说明:一定要预设最小的绝对值和绝对值最小的数,而且这个绝对值最小的数必须来自LIST数组。4.16 一个有符号字数组以0为结束标志,求这个数组的:最大值、最小值、平均值。 LIST DW -56, +12, 8
4、8, -126, -5, 16, 32, -99, 72, -18, 0 MAX DW ? AVG DW ? MOV MIN, 32767 ;将32767假设为最小的数MOV MAX, -32768 ;将-32768假设为最大的数MOV AVG, 0 ;AVG用作累加器,清零MOV CX, 0JZ DONE ;找到零元素,转DONE结束处理INC CX ;纪录非零元素个数ADD AVG, AX ;累加CMP AX, MINMOV MIN. AX ;比预设最小值还小,保留SKIP1: CMP AX, MAXJLE SKIP2 MOV MAX, AX ;比预设最大值还大,保留 JMP AGAIN
5、JCXZ NULL ;元素个数为零,转NULL处理 MOV AX, AVG CWD IDIV CX MOV AVG, AX ;计算平均值 JMP EXIT NULL: MOV MIN, 0 ;元素个数为0,将“最大值”、“最小值” MOV MAX, 0 ;“平均值”清零 MOV AVG, 0EXIT: MOV AX, 4C00H4.21编写程序,把一个30个元素的有符号字数组ARRAY按照各元素的正负分别送入数组P和M,正数和零元素送P数组,负数送M数组。 ARRAY DW 30 DUP(?) ;汇编之前置入数据 P DW 30 DUP(?) M DW 30 DUP(? DATA ENDS L
6、EA BX, ARRAY ;ARRAY数组指针 MOV SI, 0 ;P数组指针 MOV DI, 0 ;M数组指针 MOV CX, 30 ONE: MOV AX, BX ;从ARRAY数组取出一个数据 AND AX, AL JGE PLUS ;正数、零转PLUS MINUS: MOV MDI, AX ;负数存入M数组 ADD DI, 2 JMP NEXT PLUS: MOV PSI, AX ;正数、零存入P数组 ADD SI, 2 NEXT: ADD BX, 2 LOOP ONE4.30 编写程序,输入N,计算:S=1*2+2*3+(N-1)*N CODE SEGMENT CODE MESS1
7、 DB 0DH, 0AH, Input N please: MESS2 DB 0DH, 0AH, S= $ PUSH CS POP DSLEA DX, MESS1CALL READDEC ;输入NMOV CX, AXXOR BX, BX ;BX用作累加器 MOV AX, CX MOV SI, AX DEC SI MUL SI ;计算J*(J-1) ADD BX, AX ; MOV AX, BX CALL WRITEDEC ;输出结果 CALL CRLF 4.31 编写程序,输入N,输出如下矩阵(设N=5)1 1 1 1 12 2 2 2 13 3 3 2 14 4 3 2 15 4 3 2 1
8、设I为行(15), J为列(15),则(I, J)位置上的数据为:I(6-J)? I: 6-J 。INCLUDE YLIB.HMOV SI, 1 ;SI为行号 ROW: MOV CX, 5 ;CX为6-列号 COL: CMP SI, CX ;判断当前位置 JB UP DOWN: MOV AX, CX ;下半三角,取6-列号 JMP OUTPUT UP: MOV AX, SI ;上半三角,取行号 OUTPUT: MOV DX, -1 CALL WRITEDEC ;输出一个数据 LOOP COL CALL CRLF ;结束本行 INC SI ;修改行号 CMP SI, 5 JBE ROW ;未满5
9、行,继续习题五5.4 阅读下面的程序,指出该程序计划完成的功能,同时指出程序中尚存在的错误。 CODE SEGMENT ASSUME: CS: START: MOV CX, 20 LOOP0: CALL PRINTSPACE LOOP LOOP0 MOV AH, 4CH INT 21H PRINTSPACE PROC NEAR MOV CX, 40 ;该行上面添加:PUSH CX PSLOOP:MOV AL, MOV AH, 02H LOOP PSLOOP MOV AL, 0AHMOV AL, 0DH INT 21H ; 该行下面添加:POP CX RET PRINTSPACE ENDPCODE ENDS功能:输出20行空行,每行有40个空格。5.6 阅读下面的子程序,叙述它完成的功
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1