注册 登录
编程论坛 汇编论坛

新手,,,那个大侠帮帮我

qiandonghai 发布于 2010-11-13 23:04, 393 次点击
DATAS SEGMENT
    x db 45h,95h,0a6h,25h,36h,56h,0f6h,22h,33h,25h
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    mov bx,offset x
    mov cx,0ah
    mov dl,0
 l1:cmp [bx],0
    jl l2
    inc dl
 l2:inc bx
    loop l1
    mov ah,2
    int 21h
    mov ah,4c
    int 21h
CODES ENDS
    END START
求是个数中正数的个数。。。哪里错了
2 回复
#2
czsbc2010-11-14 17:06
12行 cmp byte ptr [bx],0
19行 mov ah,4ch
#3
xiaomarn2010-11-15 17:14
程序代码:
DATAS SEGMENT
    x db 45h,95h,0a6h,25h,36h,56h,0f6h,22h,33h,25h
DATAS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    mov si,offset x
    mov cx,0ah
    mov dl,0
l1:
    lodsb        ;比较喜欢用串处理指令
    or al,al   
    js l2        ;通过判断符号位判断正负
    inc dl
l2:
    loop l1
   

    add dl,30h        ;由于最后是数值,要打印出来,要将其转为ascii码,又dl一般小于10,就没判断其是否为>10的情况了
    mov ah,2
    int 21h
   

    mov ah,4ch
    int 21h
CODES ENDS
    END START

楼上部分正解,为了显示最后结果还应在最后的dl上加30h(ascii码)

1