[BX]、loop、inc、dec指令

1、[BX]

[BX]表示一个内存单元,它的偏移地址在bx中。

mov ax,[bx]

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

2、符号(约定方便阅读和理解)

描述性符号“()”

表示一个寄存器或一个内存单元中的内容。

例:ax中内容为0010H

(ax)=0010H

对于mov ax,[2]

(ax)=((ds)*16+2)

对于mov [2],ax

((ds)*16+2)=(ax)

符号idata

表示常量。

3、inc(+1),dec(-1)

inc  bx

把bx中的值加1

dec bx

把bx中的值减1

4、loop指令(含义“循环”)

格式:loop 标号

CPU执行loop指令时,要进行两个操作

  1. cx=cx-1
  2. 判断cx中的值,不为零则转至标号处执行程序,为零则向下执行

通常用loop指令来实现循环,cx中存放循环次数。

实现循环功能的框架
mov cx,循环次数
s:

    循环执行的程序段
loop s

例:编程计算2^12

code cs:code
code segment
start:
        mov ax,2
        mov cx,11
      s:add ax,ax
        loop s
        
        mov ax,4c00h
        int 21h
code ends
end start

在源汇编程序中,数据不能以字母开头,所以前面要加0。

例:将ffff:0~ffff:b中的八位数据,累加到16位寄存器中

需要解决的问题:类型的匹配以及结果的不超界。

方法:

用一个16位寄存器作为中介

将内存单元中的八位数据赋值到1个16位寄存器ax中,再将ax中的数据加到dx上,从而使两个运算对象的类型匹配且不超界。

如:

mov al,ds:[0]
mov ah,0
add dx,ax

例:

assume cs:code
code segment
        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

5、段前缀

“ds:”、“cs:”在汇编语言中称为段前缀

例:mov ax,cs:[0]

6、一段安全空间

在内存中写入数据要考虑这片空间是否安全(即是否为空)

一般程序和操作系统不会使用0:200~0::2FF。

例:拷贝

assume cs:code
code segment
        mov ax,2000
        mov ds,ax
        mov ax,0
        mov es,ax
        mov bx,0

        mov cx,16
    s:  mov ax,ds:[bx]
        mov es:[bx],ax
        inc bx
        loop s
code ends
end

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值