标题:自己编的9*9 乘法表,debug 反应出来的不怎么对啊,求解释
只看楼主
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
以下是引用zhu224039在2012-10-11 21:06:06的发言:

这个掉的大了, 你的编译器能编过去 我的编译器就不行   哎   哎  哎  

我真的那么衰么,今天出门就出了洋相 回来还出这么个怪物的错误   造孽啊

呵呵 去看了 版本 我try文件里的版本是6.15
去masm5.0里试了下确实不让跳
我的天 误导你了 不好意思啊
你下个masm6.11以上的吧就三个文件 要么我传给你
try.zip (385.1 KB)


梅尚程荀
马谭杨奚







                                                       
2012-10-11 21:09
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
加了 .386  编译时通过了,得不出结果

我要成为嘿嘿的黑客,替天行道
2012-10-11 21:09
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 42楼 zhu224039
直接下我传那个 就三个文件
然后保存到一个D盘新建的文件里 比如try最后把你的.asm文件和这三个文件放一起
debug的时候 进入这个文件 用masm xx.asm命令

梅尚程荀
马谭杨奚







                                                       
2012-10-11 21:12
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
要不我发一个MASMPlus版本的你看看?

---
程序代码:
;#Mode=DOS
;MASMPlus
;--------------------------------------------------------------------
;--------------------------------------------------------------------
; program name:            9*9 Multiplication Table
; producer:                yrjd
; program function:        Show a 9*9 Multiplication Table
; produce data:            2012-10-11  Thursday
;--------------------------------------------------------------------
assume cs:code, ds:data, ss:stack

stack segment para stack 'stack'
    db 128 dup (?)
stack ends

data segment
String        db 128 dup ('$')
Multi         db ?
RltPrompt     db 'The result is : ', '$'
EndPrompt     db 'Press any key to continue', '$'
data ends

code segment
start:                  ; Segment register initialize 段寄存器初始化
                        mov    ax, stack
                        mov    ss, ax
                        mov    sp, 128             
                        mov    ax, data
                        mov    ds, ax                 

                        ; Prompt and Output the result  提示并输出结果
                        lea     dx, RltPrompt
                        mov     ah, 09h
                        int     21h
                        call     crlf
                        call    crlf
                    
                      ; Use two Loops to Show the Multiplication Table
                      ; 用两个循环来计算并显示乘法表
                        mov    cx, 9
                        mov    al, 1
          OuterLoop:    mov    si, 0
                        mov    dl, 1
          InnerLoop:    mov    ah, al
                        mov    dh, dl
                        add    ah, 30h
                        add    dh, 30h
                        call    MulAndStore
                        mov    String[si], ah
                        mov    String[si + 1], '*'
                        mov    String[si + 2], dh
                        mov    String[si + 3], '='
                        inc    dl
                        add    si, 8
                        cmp    dl, al
                        jna    InnerLoop
                        push    ax
                        lea    dx, String
                        mov    ah, 09h
                        int     21h
                        pop    ax
                        call    crlf
                        add    al, 1
                        loop    OuterLoop
                
                        call   crlf
              
                        ; Output End Prompt 输出结束提示
                        lea    dx, EndPrompt
                        mov    ah, 09h
                        int    21h
                      
                        ; View the result and Return DOS 查看结果并返回DOS
                        mov    ah, 01h
                        int    21h
                        mov    ah, 4ch
                        int    21h          

                        ; Convert the multiplication to character
                        ; 把乘积转换为字符
    MulAndStore:        push    ax
                        push    bx
                        push    cx
                        push    dx
                        push    si
                        push    di
                  
                        mov    ah, 0
                        mul    dl
                        mov    dl, 10
                        div    dl
                        cmp    al, 0
                        jz    Single
                        jnz    Pair
             Single:    add    ah, 30h
                        mov    String[si + 4], ah
                        mov    String[si + 5], ' '
                        mov    String[si + 6], ' '
                        mov    String[si + 7], ' '
                        jmp    OK
               Pair:    add    al, 30h
                        mov    String[si + 4], al
                        add    ah, 30h
                        mov    String[si + 5], ah
                        mov    String[si + 6], ' '
                        mov    String[si + 7], ' '           

                 OK:    pop    di
                        pop    si
                        pop    dx
                        pop    cx
                        pop    bx
                        pop    ax
                        ret
          
                       ; The function of  Carriage-Return Line-Feed 回车换行
crlf:                   push    ax
                        push    dx
                        mov     dl, 0dh
                        mov     ah, 02h
                        int     21h
                        mov     dl, 0ah
                        mov     ah, 02h
                        int     21h
                        pop    dx
                        pop    ax
                        ret
                
divdw:                ; not overflow  division   实施不溢出除法获取除10的余数
                        push    si
                        push    di
                        push    ax
                
                        mov     ax, dx
                        mov     dx, 0
                        div     cx
                        mov     si, ax
                        pop     ax
                        div     cx
                        mov     cx, dx
                        mov     dx, si                 

                        pop     di
                        pop     si                 

                        ret                      
code ends

end start


梅尚程荀
马谭杨奚







                                                       
2012-10-11 21:24
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
回复 44楼 有容就大
mov    ah, 1
       int 21h
     为什么要在最后加上这个语句 后 才能把字符显示出来呢

我要成为嘿嘿的黑客,替天行道
2012-10-11 21:36
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
为什么不用子程序功能呢  

CALL 也能直接引用标号  而不是过程名  这个学习了


汇编语言 看来我还只是个皮毛啊

我要成为嘿嘿的黑客,替天行道
2012-10-11 21:41
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
不告诉我,我也不找答案了,去看《计算机网络系统方法》去了

你想来看么?  嘿嘿

我要成为嘿嘿的黑客,替天行道
2012-10-11 21:59
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
得分:0 
牛气 ,我正在整编自己的程序  让他也能运行起来

我要成为嘿嘿的黑客,替天行道
2012-10-11 22:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
以下是引用zhu224039在2012-10-11 21:36:38的发言:

 mov    ah, 1
       int 21h
     为什么要在最后加上这个语句 后 才能把字符显示出来呢
这是21中断功能 等待用户输入一个字符并回显。

[ 本帖最后由 有容就大 于 2012-10-12 12:56 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-10-12 12:27
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
以下是引用zhu224039在2012-10-11 21:59:01的发言:

不告诉我,我也不找答案了,去看《计算机网络系统方法》去了

你想来看么?  嘿嘿
5555 我的包年网费到期了 这段时间惨了
来网吧 看帖的。。。这里什么软件都没有 机器也不好使 擦!

梅尚程荀
马谭杨奚







                                                       
2012-10-12 12:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382906-1-1.html




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

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