. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验10.1看看还有什么地方值得改进的  [已解决] 回复[ 3次 ]   点击[ 349次 ]  
bluenaux
[帖 主]   [ 发表时间:2011-12-16 15:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2011-10-17 09:02
程序结果符合要求,但不知道有没有达到模块化设计
大家看看,有什么好改进的
assume cs:code

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 ax,4c00h
                        int 21h
;函数名:show_str
;参数:(dh)=行号 (dl)=列号 (cl)=字体属性 ds:si指向字符串首地址
;函数说明:在指定位置,显示指定属性的字符
;返回无
; 2011/12/16
;                
        show_str:        mov ax,0B800h
                                mov        es,ax
                                
                                mov ah,0        ;计算行位置
                                mov al,0a0h
                                mul dh
                                sub ax,0a0h
                                mov di,ax
                                
                                mov ah,0        ;计算列
                                mov al,2h
                                mul dl
                                sub ax,2h
                                add di,ax
                                
                                mov ah,cl
                                
                                
                circulate: 
                                        mov ch,0
                                        mov cl,ds:[si]
                                        jcxz return
                                        
                                        mov al,ds:[si]
                                        mov es:[di],ax

                                        add di,2
                                        inc si
                                jmp short circulate
                return:        ret 
                                

code ends
end start
bluenaux
[第1楼]   [ 回复时间:2011-12-16 16:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2011-10-17 09:02
计算行和计算列中的 MOV AH,0可以去掉,本来就是8位乘法............自己才发现
tomato
[第2楼]   [ 回复时间:2011-12-16 23:54 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
行值和列值都是从零开始的,所以,没必要再减了。
bluenaux
[第3楼]   [ 回复时间:2011-12-18 17:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2011-10-17 09:02
此贴由 贴主 于 [ 2011-12-18 17:04 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved