汇编学习笔记1

1、对比以下的指令分辨(对于masm来说  不是对于debug来说)
mov al,[0]     ;此指令的目的是将数值0传送到al中去,与mov al,0相同
mov al,ds:[0]  ;将段地址为ds偏移量为0的内存空间的值传送到al中去
mov al,[bx]    ;以bx的值为偏移量,段地址默认在ds中 将此内存空间中的数据传送到al中去
mov al,ds:[bx] ;与上面那一条相同。


2、注意:
assume cs:code

code segment
start: mov ax,2000H
  mov ds,ax
  mov bx,0
  mov al,[0]  ;1、注意用记事本写代码和debug写代码是不同的
     ;比如此处的 [1],[2],[3],编译连接后的结果并不是指偏移地址
     ;而是数值1,2,3   但是在debug中如果这样写却是指的偏移地址
     ;比如  -a 1000:10  mov ax,[3]  则是指的是偏移地址为3的内存
     ;空间中的数据,而不是将值3传送到ax中去
     ;在记事本中[0] 和0是相同的
     
     ;2、如果我们想将偏移地址[0]、[1]、[2]、[3]中的数据(当然段地址在ds中)
     ;传送到al bl cl中的话 我们可以借助bx这个寄存器(此寄存器就是为了masm编译而生)
     ;比如先用mov bx,0   然后mov al ,[bx]
     ;[bx]是8位的数据,所以当mov ax,[bx]可能出错  我们一般会这样去做mov al,[bx] mov ah,另外一个数据
     ;在汇编源程序当中数据不能以字母开头 比如ffff 必须在前面加上一个0
     
     ;3、如果我们想通过[2]  且通过masm来编译的话  就得加上段地址 这样我们就可以
     ;将[2]当作偏移地址了 而不是值了 比如:mov al,ds:[2]
  mov cl,[2]
  mov dl,[3]
  mov ax,4C00H
  INT 21H
code ends
end start

 

 

3、loop与bx的联合使用实例

assume cs:code
code segment
start:  mov ax,0ffffh
  mov ds,ax ;这是数据段地址
  mov bx,0  ;这是初始偏移地址
  mov dx,0  ;这是对存放结果的寄存器进行初始化
  mov cx,12 ;这是循环的次数
  
  
  
 s:  add dx,[bx]  ;注意此处有错误  因为内存是以字节管理的即每一个单元只有八位
      ;而dx是16的寄存器,我们不能如此相加  原因在于add指令的源操作数和
      ;目的操作数的长度必须保持一致 且目的操作数不能为立即数 但可以
      ;为寄存器或内存单元   源操作数都可以  是不能同时为内存单元

  add bx,2
  loop s
  mov ax,4c00h
  int 21h
code ends
end start


;修改方法1 借助中介ax来进行操作

assume cs:code
code segment
start:  mov ax,0ffffh
  mov ds,ax ;这是数据段地址
  mov dx,0
  mov al,ds:[0]
  mov ah,0
  add dx,ax
  . .
  . .
  . .
  . .
  . .
  
  ;这样进行12次即可以得到结果了
  mov ax,4c00h
  int 21h
code ends
end start
;修改方法2

assume cs:code
code segment
start: mov ax,0ffffh
  mov ds,ax
  mov dx,0
  mov bx,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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值