汇编语言学习(三)

学习时间: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,b
s: mov ax,ax
    loop s 

    mov ax,4c00h
    int 21h 


   3.在debug中跟踪用loop指令实现的循环程序

     

assume cs:code

code segment

start:	mov ax,0ffffh
		mov ds,ax
		
		mov bx,6
		mov dx,0
		
		mov cx,3
	s:	mov al,[bx]
		mov ah,0
		add dx,ax
		loop s 
		
		mov ax,4c00h
		int 21h
	
code ends 

end start 

      需要注意的是:ffff前要加0。

   4.loop和[bx]的联合应用

      问题一:计算ffff:0---ffff:b单元中的数据的和,结果存在dx中。

 

assume cs:code

code segment

start:	mov ax,0ffffh
		mov ds,ax
		mov bx,0
		mov dx,0
		
		mov cx,12
	s:	mov al,[bx]
		mov ah,0
		add dx,ax
		
		inc bx 
		loop s 
		
	
		mov ax,4c00h
		int 21h
	
code ends 

end start  

   5.一段安全的空间,一般的PC机,DOS方式下,DOS和其他合法的程序一般都不使用0:200~0:2ff的256个字节的空间。

   6.短前缀的使用问题。

     问题二:将内存中ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。

 

assume cs:code

code segment

start:	mov ax,0ffffh
		mov ds,ax
		mov bx,0
		mov dx,0
		
		mov cx,12
	s:	mov al,[bx]
		mov ah,0
		add dx,ax
		
		inc bx 
		loop s 
		
	
		mov ax,4c00h
		int 21h
	
code ends 

end start  


第六章 包含多个段的程序

    1.通过定义多个段来标识,把程序模块化。

assume cs:code,ds:data,ss:stack

data segment

	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
	
data ends 

stack segment

	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	
stack ends 

code segment

start:	mov ax,stack
		mov ss,ax
		mov sp,20h
		
		mov ax,data
		mov ds,ax
		
		mov bx,0
		
		mov cx,8
		
	s:	push [bx]
		add bx,2
		loop s 
		
		mov bx,0
		
		mov cx,8
		
	s0:	pop [bx]
		add bx,2
		loop s0
		
		mov ax,4c00h
		int 21h
		
code ends 

end start


    实验一:编写code段中的代码,将a段和B段中的数据依次相加,将结果存放到c段。

assume cs:code

a segment

	db 1,2,3,4,5,6,7,8
	
a ends 

b segment
	
	db 1,2,3,4,5,6,7,8
	
b ends 

d segment

	db 0,0,0,0,0,0,0,0
	
d  ends 

code segment

start:	mov ax,a
		mov ds,ax
		mov bx,0
		
		mov ax,b
		mov es,ax
		
		mov cx,8
	s:	mov al,[bx]
		add es:[bx],al
		inc bx 
		loop s 
		
		mov bx,0
		mov ax,d  
		mov ds,ax
		
		mov cx,8
	s0:	mov al,es:[bx]
		mov [bx],al
		inc bx 
		loop s0
		
		mov ax,4c00h
		int 21h
code ends 


end start 
运行结果:

              

    实验二:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b到段中。

assume cs:code

a segment

	dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends 

b segment

	dw 0,0,0,0,0,0,0,0 
	
b ends

code segment

start:	mov ax,a 
		mov ds,ax
		mov bx,0 
		
		mov ax,b 
		mov ss,ax
		mov sp,10h
		
		mov cx,8
	s:	push [bx]
		add bx,2
		loop s 
		
		
		mov ax,4c00h
		int 21h
		
		
code ends 

end start

运行结果:



复习时间:2015年8月25日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值