. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
主题 : :  我写的实验10的子程序,大家看看,找找不足  [待解决] 回复[ 6次 ]   点击[ 323次 ]  
a3187744a
[帖 主] [ 发表时间:2009-12-23 23:01 ] 
荣誉值:0
信誉值:0
注册日期:2009-10-14 19:20
第一个是显示子程序
show_str:push dx
  push es
  push ax
  push si
  push di
  push cx
  mov al,dh
  mov dh,160
  mul dh
  mov dh,0
  add dx,dx
  add ax,dx
  mov di,ax
  mov ax,0b800h        
  mov es,ax
  mov al,cl
s:mov cl,[si]
  mov ch,0
  jcxz ok
  mov byte ptr es:[di],cl
  mov byte ptr es:[di+1],al
  inc si
  add di,2
  jmp short s
ok:pop cx
  pop di
  pop si
  pop ax
  pop dx
  pop es
  ret
第二个是解决除法益处的
divdw:push bx
mov bx,ax
mov ax,dx
mov dx,0
div cx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop bx
ret
第三个是数值显示的问题
assume cs:code

data segment
 db 10 dup (0)
data ends 

code segment
start:mov ax,12666
      mov bx,data
      mov ds,bx
      mov si,0
      call dtoc

      mov dh,8
      mov dl,3
      mov cl,2
      call show_str
      
      mov ax,4c00h
      int 21h
dtoc:push cx
     push dx
     push si
     
     mov dx,0
     dtoc_s:mov cx,10
     call divdw
     jcxz dtoc_ok
     add cx,30H
     push cx
     inc si
     jmp short dtoc_s
     dtoc_ok:mov cx,si
             mov si,0
             dtoc_s1:pop [si]
             inc si
             loop dtoc_s1
             pop si
             pop dx
             pop cx
             ret

divdw:push bx
      mov bx,ax
      mov ax,dx
      mov dx,0
      div cx
      push ax
      mov ax,bx
      div cx
      mov cx,dx
      pop dx
      pop bx
      ret

show_str:push dx
         push es
         push ax
         push si
         push di
         push cx
         mov al,dh
         mov dh,160
         mul dh
         mov dh,0
         add dx,dx
         add ax,dx
         mov di,ax
         mov ax,0b800h        
         mov es,ax
         mov al,cl
         show_str_s:mov cl,[si]
         mov ch,0
         jcxz show_str_ok
         mov es:[di],cl
         mov es:[di+1],al
         inc si
         add di,2
         jmp short show_str_s
      show_str_ok:pop cx
         pop di
         pop si
         pop ax
         pop dx
         pop es
         ret 
code ends
end start



大家找找我的不足
lengyuyiming
[第3楼] [ 回复时间:2010-01-12 22:42 ] 
荣誉值:0
信誉值:0
注册日期:2010-01-11 14:49
我也发一个,请大家拍砖。谢谢!
data segment
        string db 'Hello,Assembly World!',0
data ends

stack segment
        dw 32 dup(?)
stack ends

assume cs:code,ss:stack,ds:data

code segment
        start:        mov         ax,data
                        mov         ds,ax                        ;设置段地址
                        mov         ax,stack
                        mov         ss,ax                        ;设置栈地址
                        
                        mov                ax,0B800h
                        mov                es,ax                        ;设置附加段地址,显示缓冲区地址
                        mov                si,offset string;设置源字符串首地址
                        ;mov                di,1FFh                ;设置目的地址
                        mov                dh,12                        ;设置行        
                        mov                dl,30                        ;设置列
        
                        call        ShowStr                        ;调用显示以\0结束的字符串函数
                        jmp                exit
                        
        exit:        mov         ax,4c00h                ;程序结束
                        int         21h

;显示字符子模块------------------------------------------------------
;源地址寄存器si,行地址ah,列地址al-----------------------------------
        ShowStr:
                        push        cx                                ;保存环境
                        push    di
                        push        ax
                        
                        mov                di,dx                        ;将列地址传入di
                        and                di,00FFh                ;取低位列地址
                        mov                al,80
                        mul                dh
                        add                di,ax
                        add                di,di
  ShowStrBG:mov                ch,0
                        mov                cl,ds:[si]
                        jcxz        ShowStrOK                ;判断是否为结束符\0
                        mov                es:[di],cl
                        inc                di
                        mov                es:[di],0ACh
                        inc                si
                        inc                di
                        jmp                ShowStrBG
                        
  ShowStrOK:pop                ax
                          pop                di
                          pop                cx                                ;恢复环境
                          ret        
code ends
        end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved