主题:▆◣各位大虾~~救俺 求解2道题..感谢不尽!
贵贵猫
[专家分:0] 发布于 2005-12-10 19:58:00
1·从键盘输入一串字符,以*结束输入,找出A出现的个数,并将此个数在屏幕下一行用10进制显示出来
2·已知在以ARR为首地址的数据区中存放10个带符号字数据,编程将ARR分成两个数组:正数数组P_ARY和负数数组N_ARY,并分别显示正数和负数个数
还有大侠们推荐小弟本 好汇编教材
多谢了[em28]
回复列表 (共2个回复)
沙发
erping [专家分:3660] 发布于 2005-12-11 14:23:00
;2005-12-11 13:47:43
;从键盘输入一串字符,以*结束输入,找出A出现的个数,
;并将此个数在屏幕下一行用10进制显示出来
.model tiny
_Enter macro ;回车
mov dl, 0AH
mov ah, 2
int 21H
mov dl, 0DH
mov ah, 2
int 21H
endm
.code
org 100H
_main:
xor cx, cx
_@1:
mov ah, 1
int 21H
cmp al, 'A'
jne _@2
inc cx
jmp _@1
_@2:
xor al, '*'
jnz _@1
_Enter
mov ax, cx
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 14:23:00
;2005-12-11 13:58:05
;已知在以ARR为首地址的数据区中存放10个带符号字数据,
;编程将ARR分成两个数组:正数数组P_ARY和负数数组N_ARY,
;并分别显示正数和负数个数
.model small
.data
ARR dw -71, 0, 4, -5, -89, -12, 34, -56, 23, -456
P_ARY dw 10 dup (?)
N_ARY dw 10 dup (?)
strMsg1 db 'plus :', '$'
strMsg2 db 0DH, 0AH, 'negative :', '$'
.code
_main:
mov ax, @data
mov ds, ax
cld
lea si, ARR
xor di, di ;存放正数个数
xor bx, bx ;存放负数个数
mov cx, 10
_@0:
lodsw
cmp ax, 0
jl _@1 ;是否小于0
jng _@2 ;是否等于0
mov ds:[di + N_ARY], ax
inc di
jmp _@2
_@1:
mov ds:[bx + P_ARY], 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
我来回复