我是靠谱客的博主 正直大侠,最近开发中收集的这篇文章主要介绍汇编语言(四),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

5. [BX]和loop指令

  • [bx]表示一个内存单元,它的偏移地址在bx中:mov ax,[bx]

  • 描述性符号()表示一个寄存器或一个内存单元中的内容

  • idata表示常量

5.1 [BX]

  • mov ax,[bx]bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处数据送入ax中。

  • mov [bx],axbx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax数据送入内存ax中。

问题5.1 程序和内存情况
mov ax,2000H
mov ds,ax
mov bx,1000H
inc bx;相当于bx加一
inc bx
mov [bx],ax
inc bx
inc bx
mov [bx],al
inc bx
mov [bx],al 

5.2 Loop指令

  1. loop指令格式:loop 标号;执行分为两步:(cx)=(cx)-1;判断cx值是否为零,不为零则跳转到标号出执行程序,零则向下执行。

  2. 通常用loop指令实现循环功能,cx中存放循环次数

    计算 2*12
    assume cs:code
    code segment
    	mov ax,2
    	mov cx,11;设置循环次数
    s:	add ax,ax;设置循环体,标号为s
    	loop s
    	mov ax,4c00h
    	int 21h
    code ends
    end
    

5.5 loop和[bx]的联合应用

assume cs:code
code segment
   mov ax,0ffffH
   mov ds,ax
   mov bx,0;初始化ds:bx指向ffff:0
   mov dx,0;初始化累加寄存器dx,(dx)=0
   mov cx,12;初始化循环计数寄存器cx,(cx)=12
s:	mov al,[bx]
   mov ah,0
   add dx,ax;间接向dx中加上((ds)*16+(bx))单元的数值
   inc bx;ds:bx指向下一个单元
   loop s
   mov ax,4c00H
   int 21h
code ends
end

5.6 段前缀

  • mov ax,ds:[bx]将一个内存单元内容送入ax。偏移地址在bx中,段地址在ds中。
  • mov ax,cs:[bx]将一个内存单元内容送入ax。偏移地址在bx中,段地址在cs中。

出现在访问内存单元的指令中,用于显式地指明内存单元的段地址ds:等等,在汇编语言中称为段前缀

5.8 段前缀的使用

assume cs:code
code segement
	mov ax,0ffffH
	mov ds,ax;(ds)=0ffffH
	mov ax,0020h
	mov es,ax;(es)=0020h
	mov bx,0;(bx)=0,将ds:bx指向0020:0
	mov cx,12;(cx)=12,循环12次
s:	mov dl,[bx];(dl)-(ds)*16+(bx))
	mov es:[bx],dl;((es)*16+(bx)=(dl))
	inc bx;(bx)=(bx)+1
	loop s
	mov ax,4c00h
	int 21h
	
code ends
end

最后

以上就是正直大侠为你收集整理的汇编语言(四)的全部内容,希望文章能够帮你解决汇编语言(四)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部