主题:我是汇编初学者,请帮帮我
yuyue
[专家分:0] 发布于 2005-12-11 15:41:00
1.将一个包含20个数据的数组M分成两组,正数组P和负数组N,并把这两个数组中的数据的个数显示出来 !
2.将首地址为data的字数组中的最小偶数放到ax中!
请帮帮我
回复列表 (共2个回复)
沙发
erping [专家分:3660] 发布于 2005-12-11 16:59:00
;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
板凳
erping [专家分:3660] 发布于 2005-12-11 16:59:00
;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
我来回复