zklhp 发表于 2008-7-5 17:30

分析一个没输出的程序

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bccn.net
*/ 作者: zklhp   E-mail:zklhp@sina.com  QQ:493165744
*/ 时间: 2008-7-5 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

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

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

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


buf dw 100d dup [color=Red]('1')[/color]


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

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

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

[attach]36048[/attach]

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

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

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

[[it] 本帖最后由 zklhp 于 2008-8-6 13:54 编辑 [/it]]

zklhp 发表于 2008-7-6 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

页: [1]

编程论坛