| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1586 人关注过本帖
标题:我自己第一次编的汇编程序
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
收藏
已结贴  问题点数:20 回复次数:32 
我自己第一次编的汇编程序
程序从键盘获取字符,如果不是数字键盘,结束程序,如果是空格表示 数字输入结束  
讲输入的字符ASCII吗 转换成数字 1 2 3 等,再通过输入 a=a*10+b计算出 转换成一个10进制的二进制数存放在shu中
再把 十进制数 对应位转换成ASCII 码  再显示出来

date segment
     shu dw ?
     ascii db 10 dup(?),'$'
date ends
code segment
     assume cs:code,ds:date
     mov ax,date
     mov ds,ax
     mov bx,0
     mov cx,0
node:mov ah,1
     int 21h
     cmp al,20H
     jz node3
     cmp al,30h
     jb over
     cmp al,39h
     ja over
     sub al,48
     mov ah,0
     mov shu,ax
     mov ax,10
     mul bx
     mov bx,shu
     add bx,ax
     inc cx   
     jmp node
node3:cmp cx,0
     jz over
     mov si,offset ascii
     add si,cx
     mov ax,bx
node1: mov dx,0
       mov bx,10
       div bx
       add dl,48
       mov [si],dl
       dec si
loop node1
      mov dx,offset ascii
      mov ah,9
      int 21h
over: mov ah,4ch
      int 21h
code ends
     end

哈哈哈哈哈哈啊啊哈哈

[ 本帖最后由 zhu224039 于 2012-10-1 11:44 编辑 ]
搜索更多相关主题的帖子: 二进制 十进制 
2012-10-01 11:41
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
学习了
2012-10-01 11:42
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
Z哥哥 卖萌了。我想我可以编计算器了

[ 本帖最后由 zhu224039 于 2012-10-1 11:54 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-10-01 11:45
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
成功了?

梅尚程荀
马谭杨奚







                                                       
2012-10-01 13:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
楼主 你的程序我编译通不过。。。

梅尚程荀
马谭杨奚







                                                       
2012-10-01 18:49
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
我编译的很好啊,masm5.0

我要成为嘿嘿的黑客,替天行道
2012-10-01 19:03
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
回复 5楼 有容就大
我用的是masm5.0 编译没错误啊
程序代码:
date segment
     shu dw ?
     ascii db 10 dup(?),'$'
date ends
code segment
     assume cs:code,ds:date
     mov ax,date
     mov ds,ax
     mov bx,0
     mov cx,0
node:mov ah,1
     int 21h
     cmp al,20H
     jz node3
     cmp al,30h
     jb over
     cmp al,39h
     ja over
     sub al,48
     mov ah,0
     mov shu,ax
     mov ax,10
     mul bx
     mov bx,shu
     add bx,ax
     inc cx  
     jmp node
node3:cmp cx,0
     jz over
     mov si,offset ascii
     add si,cx
     mov ax,bx
node1: mov dx,0
       mov bx,10
       div bx
       add dl,48
       mov [si],dl
       dec si
loop node1
      mov dx,offset ascii
      mov ah,9
      int 21h
over: mov ah,4ch
      int 21h
code ends
     end 

我要成为嘿嘿的黑客,替天行道
2012-10-01 19:05
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 7楼 zhu224039
结果正确吗?


MASMPlus运行后 输入一个字符就退出了。

我对这个很感兴趣 但是水平也不咋的 今天搞了半天 搞出来一个在MASMPlus下可以得到结果
不过我这个方法只能计算到四个字节(32位) 而且输入的第一个数有限制 最好不超过8个字符
可以参考下 一起研究这个东西
其实最好用字符串操作 突破范围限制 这个还不会 正在研究中。。。
程序代码:
;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;--------------------------------------------------------------------
;单个文件需要指定编译模式,否则默认是EXE方式,在系统设置中可以设置默认是DOS还是Windows.
;编译模式自带了DOS/COM/CON/EXE/DLL/LIB这几种,如果有必要,可以更改ide.ini添加新的编译模式
;当然,更好的是创建为一个工程.更方便及易于管理,使用方法:按Ctrl多选->创建工程.必须有多个文件
assume cs:code, ds:data

data segment
    astr    db    'Please input a:', '$'
    bstr     db    0dh, 0ah, 'Please input b:', '$'
    cstr    db 0dh, 0ah, 'a * 10 + b = ', '$'
    rslt    db    30 dup(?)
    nums    dw 0, 0, 0, 0
data ends

code    segment
start:        mov      ax, data
              mov     ds, ax               

              mov    si, offset nums
              
              mov    dx, offset astr
              mov    ah, 9
              int      21h
              
    aput:       mov    ah, 1
                int    21h
                cmp    al, 0dh
                jz        bput
                call    multen
                mov    ah, 0
                sub    al, 30h
                add    [si], ax
                adc    [si + 2], 0
                jmp     aput
               

    bput:        mov    dx, offset bstr
                mov    ah, 9
                int    21h
        b1:    mov    ah, 1
                int    21h
                cmp    al, 0dh
                jz        cput
                mov    si, offset nums
                add    si, 4
                call    multen
                mov    ah, 0
                sub    al, 30h
                add    [si], ax
                adc    [si + 2], 0
                jmp    b1
               

    cput:        mov    dx, offset cstr
                mov    ah, 9
                int      21h
                mov    si, offset nums
                call    multen
                mov    ax, [si]
                mov    dx, [si + 2]
                add     ax, [si + 4]
                adc    dx, [si + 6]
                mov    si, offset rslt
                mov    di, 0
        c1:    mov    cx, 10
                call     divdw
                add    cx, 30h
                push    cx
                inc    di
                cmp    ax, 0
                jz        c2
                jmp    c1
        c2:    cmp    dx, 0
                jz        c3
                jmp     c1
        c3:    mov     cx, di
            c4:
                pop     ax
                mov    [si], al
                inc    si
                loop c4
                mov    al, '$'
                mov    [si], al
              
                mov    dx, offset rslt
                mov     ah, 9
                int     21h
                mov    ah, 1
                int     21h
                mov    ax, 4c00h
                int     21h
               

divdw:        push    si
                push  bx
                push    ax
               

                mov    ax, dx
                mov    dx, 0
                div    cx
                mov     si, ax
                pop     ax
                div    cx
                mov    cx, dx
                mov    dx, si
              
                pop    bx
                pop     si
                ret

multen:        push     ax
                push    dx
                xor    ax, ax
               

                shl    WORD ptr [si + 2], 1
                shl     WORD ptr [si], 1
                adc    WORD ptr [si + 2], 0
                mov    ax, [si]
                mov    dx, [si + 2]
               

                shl    WORD ptr [si + 2], 1
                shl     WORD ptr [si], 1
                adc    WORD ptr [si + 2], 0
                shl    WORD ptr [si + 2], 1
                shl     WORD ptr [si], 1
                adc    WORD ptr [si + 2], 0
               

                add    [si], ax
                adc    [si + 2], dx
               

                xor    ax, ax
                pop    dx
                pop    ax
                ret
code    ends

end start
晕 为什么我排版整整齐齐的发上来就乱七八糟的了 很多次了 为什么啊

图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 有容就大 于 2012-10-1 20:29 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-10-01 20:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
楼主 有没有兴趣一起写个:两个大数相加的程序?

梅尚程荀
马谭杨奚







                                                       
2012-10-01 20:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用有容就大在2012-10-1 20:50:46的发言:

楼主 有没有兴趣一起写个:两个大数相加的程序?

这个还是用C写罢 挺复杂的 汇编写起来太麻烦了
2012-10-01 20:58
快速回复:我自己第一次编的汇编程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033416 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved