汇编语言学习(三)
来源:互联网 发布:最新十字绣软件 编辑:程序博客网 时间:2024/05/21 10:24
学习时间:2015年6月1日----7月14日
学习者:易天曦
第五章 [BX]he LOOP指令
1.在DEBUG中,在默认的DS存在的情况下,可以直接使用[idata]来表示DS*15+[idata]。但是在编程语言中,就不行了。必须寻找一个中介,来代替这个数字,例如BX。
2.指令 INC 表示:自增;LOOP指令表示:先在CX中存放循环的次数,然后在执行LOOP指令的时候,先CX= CX- 1 ;然后判断CX是否是0.若不是,执行循环。
例子:执行a^b 。
mov ax,a mov cx,b s: add ax,ax loop s mov ax,4c00h int 21h
执行a * b
mov ax,0 mov cx,bs: mov ax,ax loop s mov ax,4c00h int 21h
3.在debug中跟踪用loop指令实现的循环程序
assume cs:codecode segmentstart:mov ax,0ffffhmov ds,axmov bx,6mov dx,0mov cx,3s:mov al,[bx]mov ah,0add dx,axloop s mov ax,4c00hint 21hcode ends end start
需要注意的是:ffff前要加0。
4.loop和[bx]的联合应用
问题一:计算ffff:0---ffff:b单元中的数据的和,结果存在dx中。
assume cs:codecode segmentstart:mov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s:mov al,[bx]mov ah,0add dx,axinc bx loop s mov ax,4c00hint 21hcode ends end start
5.一段安全的空间,一般的PC机,DOS方式下,DOS和其他合法的程序一般都不使用0:200~0:2ff的256个字节的空间。
6.短前缀的使用问题。
问题二:将内存中ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。
assume cs:codecode segmentstart:mov ax,0ffffhmov ds,axmov bx,0mov dx,0mov cx,12s:mov al,[bx]mov ah,0add dx,axinc bx loop s mov ax,4c00hint 21hcode ends end start
第六章 包含多个段的程序
1.通过定义多个段来标识,把程序模块化。
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdata ends stack segmentdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0stack ends code segmentstart:mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov bx,0mov cx,8s:push [bx]add bx,2loop s mov bx,0mov cx,8s0:pop [bx]add bx,2loop s0mov ax,4c00hint 21hcode ends end start
实验一:编写code段中的代码,将a段和B段中的数据依次相加,将结果存放到c段。
assume cs:codea segmentdb 1,2,3,4,5,6,7,8a ends b segmentdb 1,2,3,4,5,6,7,8b ends d segmentdb 0,0,0,0,0,0,0,0d ends code segmentstart:mov ax,amov ds,axmov bx,0mov ax,bmov es,axmov cx,8s:mov al,[bx]add es:[bx],alinc bx loop s mov bx,0mov ax,d mov ds,axmov cx,8s0:mov al,es:[bx]mov [bx],alinc bx loop s0mov ax,4c00hint 21hcode ends end start运行结果:
实验二:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b到段中。
assume cs:codea segmentdw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffha ends b segmentdw 0,0,0,0,0,0,0,0 b endscode segmentstart:mov ax,a mov ds,axmov bx,0 mov ax,b mov ss,axmov sp,10hmov cx,8s:push [bx]add bx,2loop s mov ax,4c00hint 21hcode ends end start
运行结果:
0 0
- 汇编语言学习(三)
- win32汇编语言学习笔记(三)
- 80x86汇编语言学习笔记(三)
- 《汇编语言》学习(三)内存访问
- 汇编语言学习笔记(三)
- 汇编语言学习三
- 汇编语言基础知识学习笔记(三)
- 汇编语言程序设计(三)
- x86汇编语言(三)
- 汇编语言学习笔记(三)寄存器(内存访问)
- Linux 中的汇编语言(三)
- ARM汇编语言要点(三)
- 汇编语言学习(开篇)
- 汇编语言学习(一)
- 汇编语言学习(二)
- 《汇编语言》学习(十八)
- 汇编语言学习(一)
- 王爽之《汇编语言》学习重点三
- mathematica的使用
- 轻轻写书软件
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
- Spring MVC ParameterizableViewController example
- 怎么分析竞争对手网站提高自身的网站ccxtqj
- 汇编语言学习(三)
- 父进程waitpid子进程的一般实现
- 网站空间概念
- 两个清爽的白噪音网站,提高工作效率
- 猫猫学iOS 之UIDynamic重力、弹性碰撞吸附等现象
- Servlet的生命周期
- Spring MVC InternalResourceViewResolver example
- 最短路径—Dijkstra算法和Floyd算法
- [bzoj2595][WC2008]游览计划