| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:输入字符串与输出字符串中dx寄存器的问题
只看楼主 加入收藏
ycc892009
Rank: 2
等 级:论坛游民
帖 子:34
专家分:90
注 册:2009-12-23
收藏
 问题点数:0 回复次数:3 
输入字符串与输出字符串中dx寄存器的问题
程序代码:
;MASMPlus 代码模板 - 纯 DOS 程序

.model small
.stack 200h
.data
    szMsg db 'Hello World!',13,10,'$'
    string db 25
    result dw 4 dup(?)
    LastLine db 0dh,0ah,'$'
   
.CODE
START:
    mov ax,@data
    mov ds,ax
   
    ;第一部分
    ;输入字符串
    lea dx, string
    mov ah,0ah
    int 21h
    ;换行
    mov dl,0ah
    mov ah,02h
    int 21h
    mov si,offset string
    inc si
    ;取string的第二个字符
    mov cl,[si]
;cx放string字符个数
    and cx,0ffh;取低八位
    ;输出字符串
    jumpout:
    inc si
    mov dl,[si]
    mov ah,02h
    int 21h
    loop jumpout
    ;回车换行
    lea dx,LastLine
    mov ah,09h
    int 21h
   
    ;call display
   
    xor dx,dx
    xor ax,ax
   
    ;第二部分
    mov ax,100
    mov dx,result
    call display
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
   
    display proc near
        xor cx,cx
        mov bx,10
        jump:
        div bx
        push dx
        xor dx,dx;记得要清零
        inc cx
        cmp ax,0
        jnz jump
       
    myLoop:
   
        pop dx
        add dl,30h
        mov ah,02h
        int 21h
       
    loop myLoop
       
        ret
       
        display endp
END START
以上是我写的汇编代码,出现的问题是,
如果单独运行第一部分与第二部分程序都没有问题。
但是把这两部分放在一起的时候程序就是一闪而过。
用mov ah,01h输入来暂停也没有用。有人可以帮我找出问题吗?谢谢!
搜索更多相关主题的帖子: 输入 输出 字符 寄存器 
2010-10-22 22:41
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
;MASMPlus 代码模板 - 纯 DOS 程序

.model small
.stack 200h
.data
    szMsg db 'Hello World!',13,10,'$'
    string db 5                           
    len db ?
    result db 5 dup(?)
    result1 dw 12h
    LastLine db 0dh,0ah,'$'
   
.CODE
START:
    mov ax,@data
    mov ds,ax
   
    ;第一部分
    ;输入字符串
    lea dx, string
    mov ah,0ah
    int 21h
    ;换行
    mov dl,0ah
    mov ah,02h
    int 21h
    mov si,offset string
    inc si
    ;取string的第二个字符
    mov cl,[si]
;cx放string字符个数
    and cx,0ffh;取低八位
    ;输出字符串
    jumpout:
    inc si
    mov dl,[si]
    mov ah,02h
    int 21h
    loop jumpout
    ;回车换行
    lea dx,LastLine
    mov ah,09h
    int 21h
   
    ;call display
   
    ;第二部分
    mov ax,1234
    xor dx,dx
    call display
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
   
    display proc near
        xor cx,cx
        mov bx,10
    jump:
        div bx
        push dx
        xor dx,dx;记得要清零
        inc cx
        or ax,ax
        jnz jump
      
    myLoop:
   
        pop dx
        add dl,30h
        mov ah,02h
        int 21h
      
    loop myLoop
      
        ret
      
        display endp
END START
2010-10-23 15:43
ycc892009
Rank: 2
等 级:论坛游民
帖 子:34
专家分:90
注 册:2009-12-23
收藏
得分:0 
回复 2楼 xiaomarn
能详细点吗?string是偏移量地址,那么输入的字符就
自动保存在下一个字节内存单元result中,对吗?
不过xor dx,dx为什么不可以改成mov dx,result1
难道编译器为自动为其开辟一个字单元为stack使用吗?

到达理想的界面是我的目标,成功却不是快捷方式!
2010-10-23 19:07
ycc892009
Rank: 2
等 级:论坛游民
帖 子:34
专家分:90
注 册:2009-12-23
收藏
得分:0 
解决了
int 21h 调用0ah功能前的条件

到达理想的界面是我的目标,成功却不是快捷方式!
2010-10-24 10:33
快速回复:输入字符串与输出字符串中dx寄存器的问题
数据加载中...
 
   



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

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