. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  10.1 10.2 10.3程序 结果倒是无差错,可是觉得调用起来不方便。不知道怎么改进10.2 10.3  [已解决] 回复[ 5次 ]   点击[ 323次 ]  
zcouyangpeng
[帖 主]   [ 发表时间:2008-11-19 22:27 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
说明;显示一个以0结尾的字符窜
参数;ds:si指向字符串的首地址
结果:没有返回值


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 display

        mov ax,4c00h
        int 21h
子程序使用的寄存器入栈
display:push ax
        push bx
        push cx
        push ds
        push es
        push di
        push si

        mov ax,0b800h
        mov es,ax
        mov ax,data
        mov ds,ax
        mov bx,0
        mov di,0
        mov al,160
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        mov di,ax
        
用ax传送属性字符
        mov ah,cl
circle:        mov cl,[si]
        sub ch,ch
        jcxz ok
        mov al,cl
        mov es:[bx+di],ax
        add di,2
        inc si
        jmp circle
子程序使用的寄存器出栈
ok:        pop si
        pop di
        pop es
        pop ds
        pop cx
        pop bx
        pop ax
        ret

code ends
end start
zcouyangpeng
[第1楼]   [ 回复时间:2008-11-19 23:04 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
说明:进行不产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。

参数:(ax)=dword型数据的低16位
      (dx)=dword型数据的高16位
      (cx)=除数

返回:(dx)=结果的高16位
      (ax)=结果的低16位
      (cx)=余数        
assume cs:code

code segment
start:        mov ax,4240h
        mov dx,0fh
        mov cx,0ah
        call divdw

        mov ax,4c00h
        int 21h

divdw:        push ax
        push bx
        push cx
        

        mov bx,ax
        mov ax,dx
        sub dx,dx
        div cx
        push ax
        
        mov ax,bx
        div cx
        mov cx,dx
        pop dx
        
        pop cx
        pop bx
        pop ax
        ret
code ends
end start
zcouyangpeng
[第2楼]   [ 回复时间:2008-11-19 23:14 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。

参数:(ax)=word型数据
       ds:si指向字符串的首地址

返回:无


assume cs:code

data segment
        db 16 dup(0)
data ends

code segment
ks:        mov ax,12666
        mov bx,data
        mov ds,bx
        mov si,0
                
        call dtoc
        call show_wd
        mov ax,4c00h
        int 21h

dtoc:        push sp
        push bp
        push ax
        push cx
        push dx
        push si        

        mov bp,sp

fz:        mov cx,ax
        jcxz ok
        sub dx,dx
        mov cx,10
        div cx
        add dx,30h
        push dx        
        jmp fz

ok:        sub bp,sp
        sub dx,dx
        mov ax,bp
        mov cx,2
        div cx
        mov cx,ax

xh:        pop [di]
        add di,1
        loop xh
        pop si
        pop dx
        pop cx
        pop ax
        pop bp
        pop sp
        ret

show_wd:mov dh,8
        mov dl,3
        mov cl,2
        mov ax,0b800h
        mov es,ax
        mov di,0
        mov bx,0
        
        
        mov al,160
        mul dh
        mov bx,ax
        
        mov al,2
        mul dl
        mov si,ax
                


        
        
        
        mov ah,cl
xh1:        mov cl,[di]
        mov ch,0
        jcxz ok1        
        mov al,cl
        mov es:[bx+si],ax
        inc di
        add si,2
        jmp xh1

ok1:        ret

code ends
end ks
zcouyangpeng
[第3楼]   [ 回复时间:2008-11-19 23:19 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
明天再弄,呵呵。 都弄了半个月了,看了一下课程设计一。
才发现10.2,10.3还不够完善,好像就是所谓的扩展性差。实际调用起来,还要改子程序。
阿米豆腐!
zcouyangpeng
[第4楼]   [ 回复时间:2008-11-19 23:22 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
除法溢出的程序,我解决的办法就是看附注(没理解透彻),又用计算机看结果编出来的。搞了几天算是明白了点,算是得过且过吧!啊哈!
zcouyangpeng
[第5楼]   [ 回复时间:2008-11-20 23:06 ]   [引用]   [回复]   [ top ] 
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36
此贴由 贴主 于 [ 2008-11-20 23:06 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved