汇编语言学习(三)

来源:互联网 发布:最新十字绣软件 编辑:程序博客网 时间: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

运行结果:



复习时间:2015年8月25日

0 0
原创粉丝点击