. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  看完书之后回过头利用实验九体会子程序的设计  [已解决] 回复[ 5次 ]   点击[ 468次 ]  
zhou19891113
[帖 主]   [ 发表时间:2010-06-13 22:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-06-10 11:06
因为之前学过了c语言,所以在设计程序的时候比较喜欢把程序写成面向过程的程序。所以回过头做实验九的时候,利用子程序的思想,让welcome to masm显示3种颜色。由于我太注重程序结构问题,所以该程序可能感觉稍长,但是程序结构很清晰。现在把发出来,希望和大家一起讨论。
assume cs:code
stack segment
        dw 8 dup(0)
        db 'welcom to masm! '
stack ends 

code segment

main:   mov ax,stack            ;主函数入口
        mov ss,ax
        mov sp,10h
       ;以下是调用3个子程序,显示3种不同颜色的字符
        call display1            ;调用子程序1
        call display2            ;调用子程序2
        call display3            ;调用子程序3

        mov ax,4c00H
        int 21h

display1:call pub                   ;子程序1
begin:   mov byte ptr es:[di+1],10001010b
         mov dl,[si]
         mov es:[di],dl
         add di,2
         inc si
         loop begin
         ret

display2:call pub                      ;子程序2
         add di,160h
begin2:  mov byte ptr es:[di+1],01001010b
         mov dl,[si]
         mov es:[di],dl
         inc si
         add di,2
         loop begin2
         ret

display3:call pub                     ;子程序3
         add di,320h
begin3:  mov byte ptr es:[di+1],01111001b
         mov dl,[si]
         mov es:[di],dl
         inc si
         add di,2
         loop begin3
         ret

pub:         mov ax,stack                   ;由于每个程序都需要设置相关寄存器,所以把该模块做成
        mov ds,ax                      ;子程序,方便复用。但是这也是使这个程序效率变低的一点
        mov si,10h                     ;这个地方应该可以做做优化,请高手指点

        mov ax,0b800H
        mov es,ax
        mov di,5daH

        mov cx,16
        ret

code ends

end main
mess
[第1楼]   [ 回复时间:2010-06-16 13:46 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
不错,注意子程序开始和返回前对寄存器的保存。
zhou19891113
[第2楼]   [ 回复时间:2011-02-21 21:52 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-06-10 11:06
有待提高
zhou19891113
[第3楼]   [ 回复时间:2011-02-21 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-06-10 11:06
哈哈,没人顶我自己回复
zhou19891113
[第4楼]   [ 回复时间:2011-02-21 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-06-10 11:06
自己顶
zhou19891113
[第5楼]   [ 回复时间:2011-02-21 21:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-06-10 11:06
此贴由 贴主 于 [ 2011-02-21 21:53 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mess):8分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved