回 帖 发 新 帖 刷新版面

主题:我是汇编初学者,请帮帮我

1.将一个包含20个数据的数组M分成两组,正数组P和负数组N,并把这两个数组中的数据的个数显示出来 !
2.将首地址为data的字数组中的最小偶数放到ax中!
  请帮帮我

回复列表 (共2个回复)

沙发


;2005-12-11 16:36:06
;1.将一个包含20个数据的数组M分成两组,正数组P
;和负数组N,并把这两个数组中的数据的个数显示出来 !

.model small

.stack
.data
N_        equ    20
M        dw    -71, 0, 4, -5, -89, -12, 34, -56, 23, -456
        dw    -71, 0, 4, -5, -89, -12, 34, -56, 23, -456
P        dw N_ dup (?)
N        dw N_ dup (?)

strMsg1    db    'plus :', '$'
strMsg2 db    0DH, 0AH, 'negative :', '$'

.code
_main:
            mov        ax, @data
            mov        ds, ax
            
            cld
            lea        si, M
            xor        di, di  ;存放正数个数
            xor        bx, bx    ;存放负数个数
            mov        cx, N_
        _@0:
            lodsw
            cmp        ax, 0
            jl        _@1    ;是否小于0
            jng        _@2 ;是否等于0
            mov        ds:[di + N], ax
            inc        di
            jmp        _@2
        _@1:
            mov        ds:[bx + P], ax
            inc        bx
        _@2:
            loop    _@0 ;继续循环
            ;输出正数的个数
            lea        dx, strMsg1
            mov        ah, 9
            int        21H
            mov        ax, di
            mov        cx, 10
            call    print
            ;输出负数的个数
            lea        dx, strMsg2
            mov        ah, 9
            int        21H
            mov        ax, bx
            mov        cx, 10
            call    print
            
            mov        ax, 4C00H
            int        21H
print    proc ;提供多种进制的输出
        ;ax 存放要转换的数
    ;cx 存放进制形式 (2 <= 进制 <= 35)
    cmp    cx, 2    
    jl    _error_
    cmp    cx, 35
    ja    _error_
    push    bx    ;保存 bx
    push    dx    ;...
    sub    sp, 16    ;16 (2 * 8)个字节的临时变量
    mov    bx, sp  ;bx 指向变量地址
    xor    dx, dx
_loop:
    cmp    ax, 0
    jne    _next
    cmp    dx, 0
    je    _print
_next:
    div    cx
    cmp    dx, 9        ;比较余数是否大于 9
    ja    _than_nine
    add    dl, '0'
    jmp    _save_dl
_than_nine:
    add    dl, 'A' - 0AH    ;大于 9 的数转换处理
_save_dl:
    mov    ss:[bx], dl
    inc    bx
    cwd
    jmp    _loop
_print:
    dec    bx
_print_next:
    cmp    bx, sp
    jl    _end
    mov    dl, ss:[bx]
    mov    ah, 2
    int    21H
    dec    bx
    jmp    _print_next
_error_:
    xor    ax, ax    ;return false
    ret
_end:
    add    sp, 16    ;恢复堆栈
    pop    dx
    pop    bx
    
    mov    ax, 1    ;return true
    ret
print    endp
end        _main

板凳


;2005-12-11 16:40:20
;2.将首地址为data的字数组中的最小偶数放到ax中!

.model small

.stack
.data
data1    dw    34, 435, 567, 0, 324, 56, 21, 456, 456, 23
N        equ    10

.code
_main:
            mov        ax, @data
            mov        ds, ax
        
            cld
            mov        cx, N
            lea        si, data1
            xor        bx, bx
    _@0:
            lodsw
            test    ax, 1
            jnz        _@1
            cmp        ax, bx
            jae        _@1
            mov        bx, ax
    _@1:
            loop    _@0
            
            mov        ax, bx    ;最终结果存放入 ax
            ;_______________
            ;做你想做的...
            ;_______________
            mov        ax, 4C00H
            int        21H
end    _main

我来回复

您尚未登录,请登录后再回复。点此登录或注册