80x86 汇编语言:正负数分别存放、统计个数


自己定义一组有符号的字节数(小于100个),

然后将其分别存入两个数组中,其中正数和负数的个数分别存入各自数组的第一个单元,

最后显示正数的个数和负数的个数,形式为:“+N”和“-M”,

要求:统计部分用一个过程完成,显示部分用一个过程或软中断完成,

软中断的向量自己根据系统要求决定。

题目链接:http://zhidao.baidu.com/question/711091038529152645.html


提问者采纳   2014-06-13 19:51 

;---------------------------

ASSUME  CS:CC, DS:QW

;---------------------------

QW  SEGMENT

    M_1  DB  12, 13, 10, -5, -85, 37, 92, -25, 94, 10, -36

         DB  1, 100, 12, -37, 85, -6, 28, 125, 34, 17, -92

LLL  EQU  $ - M_1

    M_P  DB  101 DUP(0)

    M_N  DB  101 DUP(0)

    

    MSG  DB  13, 10, 'Press any key to continue ... $'


    O_P  DB  13, 10, '+$'

    O_N  DB  13, 10, '-$'

QW  ENDS

;---------------------------

CC  SEGMENT

START:

    MOV   AX, QW

    MOV   DS, AX

;

    CALL  TONGJI

    CALL  DISPLAY


EXIT:

    LEA   DX, MSG

    MOV   AH, 9

    INT   21H

    MOV   AH, 7

    INT   21H


    MOV   AH, 4CH

    INT   21H       ;返回DOS

;---------------------------

TONGJI:

    MOV   BX, OFFSET  M_1

    MOV   SI, OFFSET  M_P

    MOV   DI, OFFSET  M_N

    MOV   CX, LLL

LP: MOV   AL, [BX]

    CMP   AL, 128

    JB    ZHENG

    MOV   [DI + 1], AL

    INC   DI

    INC   M_N

    JMP   NEXT

ZHENG:

    MOV   [SI + 1], AL

    INC   SI

    INC   M_P

NEXT:

    INC   BX

    LOOP  LP

    RET

;---------------------------

DISPLAY:

    LEA   DX, O_P

    MOV   AH, 9

    INT   21H

    MOV   AL, M_P

    MOV   AH, 0

    CALL  OUTPUT

    LEA   DX, O_N

    MOV   AH, 9

    INT   21H

    MOV   AL, M_N

    MOV   AH, 0

    CALL  OUTPUT

    RET

;---------------------------

OUTPUT:

    MOV   BX, 10

    MOV   CX, 0

OL1:MOV   DX, 0

    DIV   BX

    ADD   DL, '0'

    PUSH  DX

    INC   CX

    CMP   AX, 0

    JNZ   OL1

    MOV   AH, 2

OL2:POP   DX

    INT   21H

    LOOP  OL2

    RET

;---------------------------

CC  ENDS

    END  START

;---------------------------


提问要求的过程,这里都有了,并且使用了简便形式。


程序执行结果如下:


C:\MASM>ww


+15

-7

Press any key to continue ...


C:\MASM>


提问者评价:谢谢。


你可能感兴趣的:(80x86汇编语言)