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

分析一个没输出的程序

zklhp 发布于 2008-07-05 17:30, 2088 次点击
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@  QQ:493165744
*/ 时间: 2008-7-5 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

昨天在论坛上看到一个试题:

设计一个加法程序,将从BUF存储单元开始的100个无符号数(16位)相加,结果存入BUF单元。

因为感觉简单 就顺手写了个程序想贴上去   又不放心 怕自己写错了(偶也是大菜鸟 ) 就随便添个


buf dw 100d dup ('1')


想运行运行试试  可啥也没输出就退出了…………

开始 偶以为自己的算法有错 程序不对  就换种写法  可换了几种  还是啥都没有 why?

想了半天还是没想出个所以然  就请出debug  

只有本站会员才能查看附件,请 登录


原来如此  '1' 是 49d 4900d是1324h 在小尾模式里正好是 24 13  就是说开始就有个 $ 那还能输出什么!!!

到这里大家都看明白了 原来怎么简单…  可这个 $ 浪费了十几分钟呀

呵呵 本文内容很简单 主要是告诉大家:别以为没输出程序就有错

[[it] 本帖最后由 zklhp 于 2008-8-6 13:54 编辑 [/it]]
3 回复
#2
zklhp2008-07-06 16:45
原来发原创就是这样呀 呵呵  

把那几个程序也贴出来 算个补充吧  

.model small
.stack 200h
.data
   
    buf dw 100d dup (1)
   
.CODE
START:
    mov ax,@data
    mov ds,ax
    xor ax,ax
    xor bx,bx
    mov cx,100d
        
@@:
    add ax,[buf+bx]
    inc bx
    inc bx
    dec cx
    jcxz @finish
    jmp @b
   
@finish:
   
    mov WORD ptr [buf],ax
    mov BYTE ptr [buf+2],'$'
    lea dx,buf
    mov ah,9h
    int 21h
   
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
   
END START



.model small
.stack 200h
.data
   
    buf dw 100d dup (1)
   
.CODE
START:
    mov ax,@data
    mov ds,ax
    xor ax,ax
    xor bx,bx
    mov cx,100d
        
@loop:
    add ax,[buf+bx]
    inc bx
    inc bx
    loop @loop
   
    mov WORD ptr [buf],ax
    mov BYTE ptr [buf+2],'$'
    lea dx,buf
    mov ah,9h
    int 21h
   
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
   
END START



.model small
.stack 200h
.data
   
    buf dw 100d dup (1)
   
.CODE
START:
    mov ax,@data
    mov ds,ax
    xor ax,ax
    xor bx,bx
    mov cx,100d
    lea si,buf
        
@loop:
    lodsw
    add bx,ax
    loop @loop
   
    mov WORD ptr [buf],bx
    mov BYTE ptr [buf+2],'$'
    lea dx,buf
    mov ah,9h
    int 21h
   
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
   
END START
#3
vfdff2008-11-02 18:11
回复 2# 的帖子
什么编译器,     mov ax,@data 也能编译通过??
#4
zklhp2008-11-02 21:27
[bo][un]vfdff[/un] 在 2008-11-2 18:11 的发言:[/bo]

什么编译器,     mov ax,@data 也能编译通过??


当然是masm!!!

这是dos汇编里的

@data 就是 .code生成的段名

汇编教程里都有吧
1