| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 372 人关注过本帖
标题:实验10
取消只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:4 
实验10
下面是王爽汇编实验10.1的答案 :在屏幕指定的行列 输出数据段的一串字符
程序代码:
assume  cs:code, ds:data
data segment
    db 'Welcome to masm!', 0
data ends

code segment
       start:  mov dh, 8
               mov dl, 3
               mov cl, 2
               mov ax, data
               mov ds, ax
               mov si, 0
               call  show_str
              

               mov ah, 1
               int 21h
               mov ax, 4c00h
               int 21h
              

         show_str:
                  push ax
                  push bx
                  push es
                  push si
                  mov ax, 0b800h
                  mov es, ax
                  mov ax, 160
                  mul dh ; ax = 160 * dh
                  mov bx, ax  ; save ax
                  mov ax, 2
                  mul dl  ; ax = dl * 2
                  add bx, ax ; bx = (160 * dh + 2 * dl) head address
                  mov al, cl
                  mov cl, 0
          show0: 

                  mov ch, [si]
                  jcxz show1
                  mov es:[bx], ch
                  mov es:[bx].1, al
                  inc si
                  add bx, 2
                  jmp show0
          show1:
                  pop si
                  pop es
                  pop bx
                  pop ax
                  ret
                 

code ends

end start
程序能正常运行 并且俺看到了结果
就是想问下 在show_str子程序里为什么要用4个push把寄存器入栈 然后再在show1里pop出来 看了下show_str的过程 貌似不入栈也无影响吧 难道int 21h 需要原始的寄存器数据?
 
2012-08-13 12:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 2楼 pangding
谢谢p版解释
我去试着把几个push 和 pop 都去掉 程序也能运行 结果一样。
原来寄存器压栈是为了保证系统的正常调用啊。
不过程序里有push 和 pop 为什么不显示的写一个stack?比如
stack segment
……
stack ends

莫非是系统内存里有一个默认的stack?


梅尚程荀
马谭杨奚







                                                       
2012-08-13 14:12
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 5楼 信箱有效
很热吗 ?

梅尚程荀
马谭杨奚







                                                       
2012-08-13 21:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 zklhp
没事言语两声。

梅尚程荀
马谭杨奚







                                                       
2012-08-13 21:43
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
push 和 pop 就是压栈上的。

那么这个栈是不是就是SS:SP? 而不要自己显示的写一个。

梅尚程荀
马谭杨奚







                                                       
2012-08-13 22:47
快速回复:实验10
数据加载中...
 
   



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

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