实验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. 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

    目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...

  2. JavaScript构造函数学习笔记分享

    构造函数就是一个普通的函数,创建方式和普通函数没有区别 不同的是构造函数名习惯上首字母大写 普通函数是直接调用,而构造函数需要使用new关键字来调用 构造函数的执行流程: 立刻创建一个新的对象 将新建 ...

  3. 从多核CPU Cache一致性的应用到分布式系统一致性的概念迁移

    概述 现代多核CPU的cache模型基本都跟下图1所示一样,L1 L2 cache是每个核独占的,只有L3是共享的,当多个cpu读.写同一个变量时,就需要在多个cpu的cache之间同步数据,跟分布式 ...

  4. 用正则表达式【regexp】进行高级搜索数据

    正则表达式介绍 正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词, ...

  5. 《Java练习题》进阶练习题(一)

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序48 ...

  6. c++-多态小案例

    多态小案例 C面向接口编程和C多态 函数类型语法基础 函数指针做函数参数(回调函数)思想剖析 函数指针做函数参数两种用法(正向调用.反向调用) 纯虚函数 抽象类 抽象类基本概念 抽象类在多继承中的应用 ...

  7. MongoDB(八):索引

    1. 索引 索引支持查询的有效地提高效率.没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档.这种扫描效率很低,需要MongoDB处理大量的数据. 索引是特殊的数据结构,以易于 ...

  8. Maven——向Maven本地仓库中手动添加依赖包(ps:ojdbc.jar)

    maven中央仓库中并非包含所有现有的依赖包和插件,部分依赖包和插件需要手动地进行添加(如ojdbc.jar) 一.添加JDK系统环境变量(maven是基于Java的,可参考:https://www. ...

  9. mysql数据库排坑过程

    刚安装mysql后想通过navicat来连接mysql,发现报错 1251这个错误,不慌.这个很简单. 首先通过cmd进入mysql. 然后修改密码规则 ALTER USER 'root'@'loca ...

  10. 自学Java编程,如何混到一个7k薪资实习生的岗位

    现在Java软件开发的专业一直都是热门,有很多专业的学生,比如电子.机械.会计.土木等等专业由于专业本身没有更高的提升空间,所以现在的年轻人更加喜欢做一些科技前沿的工作,毕竟现在接触的都是电子产品.而 ...