| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1001 人关注过本帖
标题:王爽汇编实验 10----练习技术贴
取消只看楼主 加入收藏
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
结帖率:100%
收藏
 问题点数:0 回复次数:3 
王爽汇编实验 10----练习技术贴
今天闲着没事,写了个程序
图片附件: 游客没有浏览图片的权限,请 登录注册


程序代码:
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:
    push ax
    mov ax,0B800h
    mov es,ax

    mov ax,0
    mov al,dh
    mov dh,0a0h
    mul dh
    mov di,ax
    xor ax,ax
    mov al,dl
    add al,dl
    add di,ax

begin:    mov al,0
    sub al,[si]
    jz return
    mov al,[si]
    mov es:[di],al
    mov es:[di+1],cl
    inc si
    add di,2
    jmp begin
return:    pop ax
    ret

code ends
end start


[ 本帖最后由 Explorerlxz 于 2014-6-5 09:03 编辑 ]
搜索更多相关主题的帖子: 技术 
2014-06-04 22:26
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
解决除法溢出的问题
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
;解决除法溢出问题的方法就是高位除以除数保留在高位,高位除完除数的余数与低位之和除以除数保留在低位
code segment
assume cs:code
start:    mov ax,4240h
    mov dx,000fh
    mov cx,0ah
    call divdw

    mov ax,4c00h
    int 21h

divdw:    jmp begin
a    : dw 0,0,0
begin:    push bx
    mov si,offset a
    mov bx,cs
    mov ds,bx
    mov [si],dx
    mov [si+2],ax
    mov ax,dx
    mov dx,0
    div cx
    mov [si+4],ax;暂时结果高位
    mul cx
    sub [si],ax
    mov dx,[si]
    mov ax,[si+2]
    div cx
    mov cx,dx
    mov dx,[si+4]
    pop bx
    ret
code ends
end start
2014-06-05 09:09
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
子函数描述
名称:dtoc
功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
参数:(ax)=word型数据
        ds:si指向字符串的首地址
返回:无
应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用本次试验中的第一个子程序show_str
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
assume cs:code,ds:data

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 si
    push dx
    push cx
    push bx
    push ax

   s:    mov dx,0;循环s用于得到所求数字每个字符,但是顺序与实际显示的相反
    mov cx,10
    div cx
    add dl,30h
    mov [si],dl
    inc si
    mov cx,ax
    inc cx
    loop s
    
    dec si
    mov bx,0
go_on:    mov al,[bx];循环go_on用于调整字符的顺序
    mov cl,[si]
    mov [bx],cl
    mov [si],al
    dec si
    inc bx
    cmp si,bx
    ja go_on

  over:    pop ax
    pop bx
    pop cx
    pop dx
    pop si
    ret


show_str:
    push ax
    mov ax,0B800h
    mov es,ax
    call clean_screen
    mov ax,0
    mov al,dh
    mov dh,0a0h
    mul dh
    mov di,ax
    xor ax,ax
    mov al,dl
    add al,dl
    add di,ax
  
begin:    mov al,0
    sub al,[si]
    jz return
    mov al,[si]
    mov es:[di],al
    mov es:[di+1],cl
    inc si
    add di,2
    jmp begin
return:    pop ax
    ret

clean_screen:
    push ax;此子函数用于清空屏幕
    push es
    push si
    push cx
    mov ax,0b800h
    mov es,ax
    mov si,0
    mov cx,2000
   be:  mov ax,0002h
    mov es:[si],ax
    add si,2
    loop be
    pop cx
    pop si
    pop es
    pop ax
    ret

code ends
end start
2014-06-05 20:16
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:0 
2楼解决除法溢出问题的方案不太好,设计的子程序不能直接被其它程序调用,寄存器没有入栈保护,子程序内部使用局部变量,使得可移植性不太好,改进版本如下
程序代码:
code segment
assume cs:code
start:    mov ax,4240h
    mov dx,000fh
    mov cx,0ah
    call divdw

    mov ax,4c00h
    int 21h

divdw:    
    push di
    push bx

    mov bx,ax;bx暂存数据低位
    mov di,dx;di暂存数据高位

    mov ax,dx
    mov dx,0
    div cx
    push ax;高位的商入栈

    mul cx
    sub di,ax
    mov dx,di
    mov ax,bx
    div cx
    pop dx

    pop bx
    pop di
    ret
code ends
end start


[ 本帖最后由 Explorerlxz 于 2014-6-6 21:22 编辑 ]
2014-06-06 21:19
快速回复:王爽汇编实验 10----练习技术贴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016183 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved