实验10

1.在屏幕8行3列,用绿色显示data段中的字符串

assume cs:code
data segment
db'Welcome to masm!',
data ends code segment
start:
mov dh, ;行
mov dl, ;列
mov cl, ;颜色
mov ax,data
mov ds,ax
mov si, ;字符串首地址
call show_str
mov ax,4c00h
int 21h show_str:
push ax ;用到的寄存器入栈
push bx
push cx
push dx
push es
push di mov ax,0B800h ;定义显示缓冲区的段地址
mov es,ax ;N为行,M为列
;计算写入首地址的偏移地址 公式:1) 0A0H*(N)+M*2
mov al,dh
mov ah, mov bl,0A0h ;每行偏移A0H
mul bl
mov bl,dl
mov bh,
add ax,bx
add ax,bx
mov di,ax ;ax为首地址的偏移地址
mov dl,cl ;dl存颜色
mov ch, nx:
mov cl,ds:[si] ;判断字符是否为00
jcxz over
mov bl,cl
mov bh,dl
mov es:[di],bx ;赋值
add si,
add di,
jmp short nx over:
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret code ends
end start

2.解决除法溢出

参数:ax=被除数的低16位,dx=被除数的高16位,cx=除数

返回值:dx=结果的高16位,ad=结果的低16位,cx=余数

assume cs:code
code segment
start:
mov ax,4240h
mov dx,000fh
mov cx,0Ah
call divdw
mov ax,4c00h
int 21h
divdw:
push ax
mov ax,dx
mov dx,
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
ret
code ends
end start

3.数值显示

将data段中的数据以十进制形式显示出来

assume cs:code
data segment
dw ,,,,,
dw ,,,,,,,
data ends code segment
start:
mov ax,data
mov ds,ax
mov ax,20h
mov ax,
mov ax,0B800h
mov es,ax
mov si, ;si为数据段的偏移
mov di, ;di为显示缓冲区的偏移
mov cx,
call dioffset ;计算di值 s:push cx
mov ax,[si] ;取数据
mov dx,[]
mov bx, ;bx为数字的位数
mov bp,0ch
call dtoc
mov cx,bx
s5:call display
loop s5
add si,
pop cx
loop s
mov ax,4c00h
int 21h ;把数字转为字符串
dtoc:
mov cx, ;除数10
call divdw
jcxz s6
add cx,30h
mov ds:[bp],cx ;数字入栈
add bp,
inc bx ;数字位数加1
jmp short dtoc
s6:ret ;把字符存入显示缓冲区中
display:
push dx
mov dx,ds:[bp-]
sub bp,
mov dh,
mov es:[di],dx ;赋值
add di,
pop dx
ret ;求显示缓冲区偏移地址
dioffset:
push bx
push dx
mov dh, ;行
mov dl, ;列
mov al,dh
mov ah,
mov bl,0A0h ;每行偏移A0H
mul bl
mov bl,dl
mov bh,
add ax,bx
add ax,bx
mov di,ax ;ax为首地址的偏移地址
pop dx
pop bx
ret
;防溢出除法
divdw:
push bx
push ax
mov ax,dx
mov dx,
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
pop bx
ret code ends
end start

CALL和RET指令实验的更多相关文章

  1. 王爽汇编第十章,call和ret指令

    目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...

  2. 汇编语言---call和ret指令

    汇编语言--call和ret指令 call和ret指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP. 它们经常被共同用来实现子程序的设计. ret和retf ret指令用栈 ...

  3. 汇编学习笔记(7)call和ret指令

    ret和retf CPU执行ret指令时进行以下两步操作: (IP)=((ss)*16+(sp)) (sp)=(sp)+2 这相当于pop IP CPU执行retf指令时进行以下四步操作: (IP)= ...

  4. [汇编学习笔记][第十章 CALL和RET指令]

    第十章 CALL和RET指令 call和ret指令都是转移指令,它们都修改CS和IP.经常被共同用于实现子程序的设计.这一章,我们讲解call和ret指令的原理 10.1 ret和retf ret指令 ...

  5. call 和 ret 指令

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. 汇编-10.0-CALL和RET指令

    call和ret指令都是转移指令,他们都是修改IP,或同时修改CS和IP.它们常被共同用来实现子程序设计. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移: retf指令 ...

  7. 第十章 Call 和 Ret 指令

    引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...

  8. 汇编语言笔记 CALL和RET指令

    转载地址:http://www.cnblogs.com/dennisOne ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程 ...

  9. 自己总结:汇编CALL和RET指令

    ret指令,相当于 pop IP:修改IP的内容,从而实现近转移 retf指令,相当于 pop IP pop CS:修改CS和IP的内容,从而实现远转移 -------------- CPU执行cal ...

随机推荐

  1. DRF Django REST framework 之 频率,响应器与分页器组件(六)

    频率组件 频率组件类似于权限组件,它判断是否给予请求通过.频率指示临时状态,并用于控制客户端可以向API发出的请求的速率. 与权限一样,可以使用多个调节器.API可能会对未经身份验证的请求进行限制,而 ...

  2. 怎么样才算是精通 Python?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45587093 你们所说的什么要怎样数据分析.爬虫.We ...

  3. 20.DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    一 认证组件 1. 局部认证组件 我们知道,我们不管路由怎么写的,对应的视图类怎么写的,都会走到dispatch方法,进行分发, 在咱们看的APIView类中的dispatch方法的源码中,有个sel ...

  4. JS-常考算法题解析

    常考算法题解析 这一章节依托于上一章节的内容,毕竟了解了数据结构我们才能写出更好的算法. 对于大部分公司的面试来说,排序的内容已经足以应付了,由此为了更好的符合大众需求,排序的内容是最多的.当然如果你 ...

  5. for-in的缺点

    for-in用来循环对象中的属性,但是通过for-in循环输出的属性名的顺序是不可测的.具体来说,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异. ES5之前:如果表示要迭代的对象的变量值 ...

  6. web性能优化指南

    前端性能优化,是每个前端必备的技能,优化自己的代码,使自己的网址可以更加快速的访问打开,减少用户等待,今天就会从几个方面说起前端性能优化的方案, 看下面的一张图,经常会被面试官问,从输入URL到页面加 ...

  7. 搞懂toString()与valueOf()的区别

    一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 “[object type]”,其中type是对象类型. 二.valu ...

  8. C# DataTable 某一列取算

    1. 列为数字类型double total= Convert.ToDouble(datatable.Compute("SUM(需要求和的参数)", "")); ...

  9. 函数式响应式编程 - Functional Reactive Programming

    我们略过概念,直接看函数式响应式编程解决了什么问题. 从下面这个例子展开: 两个密码输入框,一个提交按钮. 密码.确认密码都填写并一致,允许提交:不一致提示错误. HTML 如下: <input ...

  10. python操作文件——序列化pickling和JSON

    当我们在内存中定义一个dict的时候,我们是可以随时修改变量的内容的: >>> d=dict(name='wc',age=28) >>> d {'name': 'w ...