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

有懂【【【PCSPIM】】】程序的大虾吗?请进来尝试下...

yanxunhao 发布于 2007-11-28 11:27, 1621 次点击
最近在学PCSPIM  
自学还是很困难,请懂的大虾赐教.  
如何编译:输入一个数字,如果是正整数,那么结果为百位,十位,个位数字相加之和,如果输入不是正整数,那么输出error.  

例如,输入数字728,那么结果为17.  

懂的大虾请赐教  
我编出来总是不能符合题意


用汇编也行
6 回复
#2
zhoulikelvjj2007-11-28 12:53
判断第一个字符是不是'-',是就输出ERROR
不是再用除10取余法挨个着加
#3
yanxunhao2007-11-28 15:01
该怎么做呢?
能不能帮忙大概写下,十分感谢
#4
zhoulikelvjj2007-11-28 16:03
data segment
prompt1 byte "input a string:",'$'
prompt2 byte "error!",'$'
string byte 100 dup (?)
num    word ?
outstring byte 5 dup (?),'$'
data ends
code segment 'code'
        assume ds:data,cs:code

start:
        mov ax,data
        mov ds,ax
        mov si,0
        mov ah,9
        lea dx,prompt1
        int 21h

    AGN:mov ah,1        ;输入部分,遇回车退出输入
        int 21h
        cmp al,0dh
        jz EXT
        mov string[si],al
        inc si
        jmp AGN

    EXT:mov cx,si
        mov si,0
        cmp string[si],'-'          ;如果是负号就跳到ERR.输入"ERROR!"
        jz ERR
        mov bx,0
        xor ax,ax
   ATOD:mov al,string[si]           ;依次取一个字符,然后转换为整数,加在BX里
        sub al,30h
        add bx,ax
        inc si
        loop ATOD
        mov num,bx                  ;放在num里储存
        jmp OUTP   

    ERR:mov dl,0dh                  ;输出ERROR!
        mov ah,2
        int 21h
        mov dl,0ah
        int 21h
        lea dx,prompt2
        mov ah,9
        int 21h
        jmp EXIT

   OUTP:mov si,4                    ;输出部分
        mov ax,num
        mov bx,10
   AGN1:xor dx,dx                   ;对num除10取余.然后逆序放入outstring变量里
        div bx
        or dl,30h
        mov outstring[si],dl
        dec si
        cmp ax,0
        jnz AGN1
        mov dl,0dh                  ;输出回车换行后输出outstring里的内容
        mov ah,2
        int 21h
        mov dl,0ah
        int 21h
        lea dx,outstring
        mov ah,9
        int 21h
        
   EXIT:mov ah,4ch
        int 21h

code ends
end start
#5
yanxunhao2007-11-28 16:08
大虾,真的很谢谢你,但是我执行还是有点错误...
#6
zhoulikelvjj2007-11-28 16:09
怎么会有错误呢?我运行过好几遍了..
#7
yanxunhao2007-11-28 16:10
啊,大虾,那你加我QQ好吗
344346560
1