CALL和RET指令实验
实验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指令实验的更多相关文章
- 王爽汇编第十章,call和ret指令
目录 王爽汇编第十章,call和ret指令 call和ret指令概述: ret和retf ret指令 retf指令 call 和 ret 的配合使用 call指令详解 call原理 call指令所有写 ...
- 汇编语言---call和ret指令
汇编语言--call和ret指令 call和ret指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP. 它们经常被共同用来实现子程序的设计. ret和retf ret指令用栈 ...
- 汇编学习笔记(7)call和ret指令
ret和retf CPU执行ret指令时进行以下两步操作: (IP)=((ss)*16+(sp)) (sp)=(sp)+2 这相当于pop IP CPU执行retf指令时进行以下四步操作: (IP)= ...
- [汇编学习笔记][第十章 CALL和RET指令]
第十章 CALL和RET指令 call和ret指令都是转移指令,它们都修改CS和IP.经常被共同用于实现子程序的设计.这一章,我们讲解call和ret指令的原理 10.1 ret和retf ret指令 ...
- call 和 ret 指令
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 汇编-10.0-CALL和RET指令
call和ret指令都是转移指令,他们都是修改IP,或同时修改CS和IP.它们常被共同用来实现子程序设计. 1.ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移: retf指令 ...
- 第十章 Call 和 Ret 指令
引言 想想程序之间的加载返回过程. call 和 ret 指令都是转移指令,它们都修改 IP,或同时修改 CS 和 IP. call 和 ret 经常被共同用来实现自程序的设计. 这一章,我们讲解 c ...
- 汇编语言笔记 CALL和RET指令
转载地址:http://www.cnblogs.com/dennisOne ☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程 ...
- 自己总结:汇编CALL和RET指令
ret指令,相当于 pop IP:修改IP的内容,从而实现近转移 retf指令,相当于 pop IP pop CS:修改CS和IP的内容,从而实现远转移 -------------- CPU执行cal ...
随机推荐
- 深入理解 Java 反射和动态代理
- 工具类中注入service和dao
今天编写了个工具类需要用到service成和dao层的代码 如下: //第一步:需要将工具类注入到容器中 @Component public class RuleUtils { //第二部注入 @ ...
- MySQL 04
目录 python操作mysql mysql sql注入问题 问题描述 解决办法 增/删/改 查询 索引 基本概念 索引的原理 mysql索引种类 普通索引 唯一索引 联合索引 创建索引 正确使用索引 ...
- Day 09 函数
目录 函数 函数的基本概念 为何使用函数 定义函数 什么是参数(形参,parameter) 定义函数的三种形式 无参函数 有参函数 空函数 函数的参数 形参和实参(parameter & ar ...
- 【Redis】270- 你需要知道的那些 redis 数据结构
本文出自「掘金社区」,欢迎戳「阅读原文」链接和作者进行技术交流 ?? 作者简介 世宇,一个喜欢吉他.MDD 摄影.自走棋的工程师,属于饿了么上海物流研发部.目前负责的是网格商圈.代理商基础产线,平时喜 ...
- shell 100
1.编写hello world脚本 #!/bin/bash# 编写hello world脚本 echo "Hello World!"2.通过位置变量创建 Linux 系统账户及密码 ...
- 深入浅出分析 PriorityQueue
一.摘要 在前几篇文章中,咱们了解到,Queue 的实现类有 ArrayDeque.LinkedList.PriorityQueue. 在上一章节中,陆续的介绍到 ArrayDeque 和 Linke ...
- CentOS6.8系统最小化安装
一.CentOS系统版本 CentOS-6.8-x86_64 二.安装系统 1.打开VMware主页点击创建虚拟机 2.选择镜像 3.启动虚拟机 4.键入回车键直接进行安装 5.按Tab键选择Skip ...
- LVM(逻辑卷管理器)部署、扩容、缩小
物理卷 -- Physical Volume -- PV 卷组 -- Volume Group -- VG 逻辑卷 -- Logical Volume -- LV 1.硬盘设备管理技术虽然能够有效 ...
- Linux MySQL的root无法登录数据库ERROR 1045 (28000)
Linux环境下,脚本自动安装完数据库,命令行用mysql -uroot -ppasswaord 登录却报了这么个错: ERROR 1045 (28000): Access denied for us ...