| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1382 人关注过本帖
标题:汇编输入一个数 再显示这个数?
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:12 
汇编输入一个数 再显示这个数?
我的意图是输入一个数后 ENTER 程序马上再显示这个数出来
貌似0-9可以用 SUM AL 30H来搞 2位 3位 多位的数怎么弄 是不是要存在一个字符数组里然后 通过单个字符转换
为数字 并循环输出?

有没有其他的方法?
搜索更多相关主题的帖子: 其他 
2012-05-25 13:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序代码:
;//////////////////////////////////
stack segment para stack 'stack'
 
      db  1024 dup(?)
     
stack ends

;////////////////////////////////////
data segment para stack 'stack'
 
    input  db 'Please input a number:$'
    crlf   db 0dh, 0ah, '$'
    output db 'The result is :$'
   
    ;----------------------------
    buffer_size db 50   ; max string length = 50
    actual_size db ?    ; actual string length
    chars       db 50 dup (20h)  ; store from here
   
data ends

;/////////////////////////////////////////////
code segment
  
     assume  ds:data, cs:code, ss:stack
    
   start:  mov ax, data
           mov ds, ax
          
           ; display the 'input' string context
           lea dx, input   
           mov ah, 09h
           int 21h
          
           ; get the buffer_size and input a string
           lea dx, buffer_size 
           mov ah, 0ah
           int 21h            
        
           ; get the actual_size and loop output
           mov cl, actual_size
           add cl, 0
           jnz display
           jmp exit_proc
          
           ;---------------------
           ;---------------------
      display:
           ; enter & change line
           lea dx, crlf
           mov ah, 09h
           int 21h
          
           ; display 'output' string
           lea dx, output
           mov ah, 09h
           int 21h
          
           ; get the string length and set end with '$'        
           xor cx, cx
           mov cl, actual_size
           mov dx, offset chars
           mov bx, dx
           add bx, cx
           mov BYTE ptr [bx], '$'
          
           ; display the single character
           mov ah, 09h
           int 21h
          
           ;------------------------
           ;------------------------   
      exit_proc:
           mov  ah, 4ch
           int  21h
          
code  ends

end start
这个是一个 输入一串字符再将其显示出来的代码 为什么我运行后无法输入字符串?
; get the buffer_size and input a string
           lea dx, buffer_size
           mov ah, 0ah
           int 21  
--
这个中断调用没起作用啊 为什么?

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

诚心求教!

[ 本帖最后由 有容就大 于 2012-5-25 15:21 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-25 14:46
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:7 
程序代码:
stack1 segment para stack 'stack'           //stack是关键字,不能做为堆栈段名称
       db  1024 dup(?)
    

 stack1 ends

;////////////////////////////////////
 data segment para stack 'stack'       
     input  db 'Please input a number:$'
     crlf   db 0dh, 0ah, '$'
     output db 'The result is :$'
  
     ;----------------------------
     buffer_size db 50   ; max string length = 50
     actual_size db ?    ; actual string length
     chars       db 50 dup (20h)  ; store from here
  

 data ends

;/////////////////////////////////////////////
 code segment

 
      assume  ds:data, cs:code, ss:stack1
   
   start:  mov ax, data
            mov ds, ax
         
           ; display the 'input' string context
            lea dx, input 
            mov ah, 09h
            int 21h
         
           ; get the buffer_size and input a string
            lea dx, buffer_size
           mov ah, 0ah
            int 21h          
       
            ; get the actual_size and loop output
            mov cl, actual_size
            add cl, 0
            jnz display1
            jmp exit_proc
         
           ;---------------------
            ;---------------------
       display1:               display也不能作为变量名称
            ; enter & change line
            lea dx, crlf
            mov ah, 09h
            int 21h
         
           ; display 'output' string
            lea dx, output
            mov ah, 09h
            int 21h
         
           ; get the string length and set end with '$'      
            xor cx, cx
            mov cl, actual_size
            mov dx, offset chars
            mov bx, dx
            add bx, cx
            mov BYTE ptr [bx], '$'
         
           ; display the single character
            mov ah, 09h
            int 21h
         
           ;------------------------
            ;------------------------ 
       exit_proc:
            mov  ah, 4ch
            int  21h
         
code  ends

end start这样就ok了

最基础的往往是你最容易忽略的!
2012-05-25 20:48
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 于祥
非常感谢你帮我解答 原来这样
这个是我看资料 凑合的 还是对一些东西理解不透 比如JNZ 网上介绍的不怎么深入
 JNZ(或JNE)(jump if not zero, or not equal),汇编语言中的条件转移指令。结果不为零(或不相等)则转移。   格式: JNZ(或JNE) PRO   测试条件:ZF=0
那他在这个程序中是什么和什么比较 如果说是cl不为0就跳转 那么没有显示的dec cl 难道是隐含在里面的吗?

还有个问题 下面是我运行这个程序的过程
图片附件: 游客没有浏览图片的权限,请 登录注册


每运行一次程序都要输入他的绝对路径吗 我把程序放在了D:\masm\11\dis里 那要是一个超长的路径每次输入很麻烦啊 有没有简单的方法?

梅尚程荀
马谭杨奚







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

非常感谢你帮我解答 原来这样
这个是我看资料 凑合的 还是对一些东西理解不透 比如JNZ 网上介绍的不怎么深入  JNZ(或JNE)(jump if not zero, or not equal),汇编语言中的条件转移指令。结果不为零(或不相等)则转移。   格式: JNZ(或JNE) PRO   测试条件:ZF=0那他在这个程序中是什么和什么比较 如果说是cl不为0就跳转 那么没有显示的dec cl 难道是隐含在里面的吗?

还有个问题 下面是我运行这个程序的过程


每运行一次程序都要输入他的绝对路径吗 我把程序放在了D:\masm\11\dis里 那要是一个超长的路径每次输入很麻烦啊 有没有简单的方法?

到那个目录里就是了呗
2012-05-26 13:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用zklhp在2012-5-26 13:19:46的发言:


切到那个目录里就是了呗
怎么切啊 z版 还拿不稳刀 。不过我现在有个办法就是把路径复制后再黏贴 但是这个只是对于一个路径有效多个路径就又麻烦了,能比划下切的动作吗?

梅尚程荀
马谭杨奚







                                                       
2012-05-26 14:31
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我的意思就是cd到那个目录里 至于多个目录么 可以用历史命令 cmd里就是上下方向键 比再打容易一些
2012-05-26 15:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 7楼 zklhp
哦 原来这样啊 谢谢啦

梅尚程荀
马谭杨奚







                                                       
2012-05-26 16:43
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:0 
回复 4楼 有容就大
JNZ和JNE就是判断标志位ZF是不是为0的转移指令,你上边的指令有可能会影响ZF标志位,不一定就的DEC指令才行


我们的编译器是老师给的,我没用过其他的

最基础的往往是你最容易忽略的!
2012-05-26 20:02
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 9楼 于祥
看来还的慢慢学习 还不清楚影响ZF标志位的一些东西是什么。

梅尚程荀
马谭杨奚







                                                       
2012-05-26 20:26
快速回复:汇编输入一个数 再显示这个数?
数据加载中...
 
   



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

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