汇编基础知识

1 数据传送 MOV

MOV dest,src

(1)两个操作数类型(长度)相同

(2)不能同为存储操作数

(3)立即数不能作为目的操作数

(4)CS不能作为目的操作数,CS存的是段基址

(5)两个操作数不能同为段寄存器

2寻址方式

(1)直接寻址

data segment

x db 2,3

y dw 100,50

data ends

设x的偏移地址为0000H那x的第一个数据为2,第二个数据为3

2 0000H

3 0001H

100 0002H

50 0004H

MOV AL,X 等价于 MOV AL,[0000H]

其中基址又DS提供

MOV AX,x 错误指令 AX两个字节,而x为一个字节,类型不符合

MOV AX,WORD PTR x 类型PTR强制转换,将x中的第一个字节存入AL,第二个字节存入AH

(2)间接寻址

仅限于BX,BP,SI,DI

基址寄存器BX,BP

变址寄存器SI,DI

MOV AX,[BX][SI]

两个操作数不能同时为内存单元

MOV X,X+1 错误两操作数均为内存操作数

MOV X,[BX]

MOV [DI],[SI] 都是此错误

操作类型要明确

设(BX)=2000H

MOV [BX],-4 没有指明长度,无法翻译

3.LEA指令和OFFSET

LEA REG16,MEM 把源操作的偏移地址存入目的操作数中

REG16为16位通用寄存器,MEM为存储器操作数。

OFFSET 地址操作运算符

例子:

data segment

x db 1,2,3

y db 3 DUP(?)

data ends

把X开始的三个数依次传入y中

解法一:

mov al,x

mov y,al

mov al,x+1

mov y+1,al

mov al,x+2

mov y+2,al

这种方法费事,很麻烦

解法二

lea si,x

lea di,y;将x,y地址传送到si,di

mov cx,3;计数器,循环结束控制

next: mov al,[si]

        mov [di],al

        inc si;inc 自加操作

        inc di

       loop next

posted @ 2013-04-15 17:15  剑不飞  阅读(160)  评论(0编辑  收藏  举报