. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验十3.数值显示  [待解决] 回复[ 1次 ]   点击[ 57次 ]  
1152659530
[帖 主]   [ 发表时间:2023-08-05 00:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
assume cs:code,ss:stack,ds:data

data segment
                db 16 dup(0)
data ends

stack segment
                db 32 dup(0)       ; 注:栈不要溢出
stack ends

code segment
start:
                mov ax,stack       ;初始化stack段、data段及子程序dtoc的参数
                mov ss,ax
                mov sp,32
                mov ax,12666
                mov cx,0ah
                mov ch,0
                mov dx,0
                mov bx,data
                mov ds,bx
                mov si,0
  
                call dtoc          ;调用子程序dtoc将数据转化位字符串存储在data段中
                
                mov dh,8           ;初始化子程序show_str的参数
                mov dl,3
                mov cl,2
                                
                call show_str      ;调用子程序show_str显示字符串
                                
                mov ax,4c00h
                int 21h
dtoc:
                push ax
                push dx
                push cx
                push bx
                push si
                                
                mov si,0
                mov bx,cx       
        qy:     mov cx,bx             
                                div cx
                                mov cx,ax
                                add dx,30h
                                push dx            ;取余数存储到stack中
                                inc si             ;计算数据个数
                                jcxz num
                                mov dx,0
                                jmp qy
                                
        num:    mov cx,si
                                mov si,0       
        enter: 
                pop ax              ;字符循环出栈录入data段
                mov [si],al
                inc si
                loop enter
                    
                pop si
                pop bx
                pop cx
                pop dx
                pop ax
                ret

show_str:
                push dx
                push cx
                push ax
                push es
                push si
                push di
                mov si,0
                mov di,0

                mov ax,0b800h
                mov es,ax
                mov ax,0a0h
                mul dh
                mov di,ax                           
                mov dh,0
                add dl,dl
                add di,dx                           
                mov ch,0
                mov ax,cx
             fz:mov cl,[si]
                jcxz ok
                mov byte ptr es:[di],cl             
                mov byte ptr es:[di+1],al           
                inc si
                add di,2
                jmp short fz
             ok:pop di
                pop si
                pop es
                pop ax
                pop cx                 
                pop dx
                ret                             
code ends
end start
1152659530
[第1楼]   [ 回复时间:2023-08-05 00:34 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
回复:[贴 主]
------------------
欢迎讨论
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved