1- [bx]和内存单元的描述 [0]表示内存单元, 他的偏移地址为0
mov ax,[0] 将一个内存单元的内容送入到ax.这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在ds中.
mov al,[0] 将一个内存单元的内容送入到al,这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址为0,段地址在ds中.
完整的描述一个内存单元,需要两种信息:(1)内存单元地址(2)内存单元的长度(类型)
mov ax,[bx] 将一个内存单元的内容送入到ax, 这个内存单元的长度为2字节(字单元),存放一个字,偏移地址在bx中,段地址在ds中.
mov al,[bx] 将一个内存单元的内容送入到al, 这个内存单元的长度为1字节(字节单元),存放一个字,偏移地址在bx中,段地址在ds中.
2- 我们定义得描述性符号"()" 表示一个寄存器或一个内存单元中得内容.
(ax) 表示ax中得内容,(al)表示al中得内容
(20000H)表示内存20000H单元的内容,()中的内存单元的地址为物理地址
(ds)*16+(bx)
()中的元素可以有三种类型
1>寄存器名 (ax)
2>段寄存器名(ds)
3>内存单元的物理地址(一个20位数据) (20000H) ,((ds)*16+(bx))
不正确的表示(1000H), (2000:0),((ds):1000H)
3- 约定符号idata表示常量
mov ax,[idata]就代表mov ax,[1] mov ax,[2] mov ax,[3]等
mov bx,idata 就代表 mov bx,1 mov bx,2 mov bx,3等
4- loop
实现2^12 (N * 2 可以用N + N实现)
1 assume cs:code 2 code segment 3 mov ax, 2 4 mov cx, 11 5 s: add ax, ax 6 loop s //(1) (cx) = (cx) - 1; (2)判断(cx)不为零则转到s所标示的地址处执行.如为0则执行下一条指令 7 8 mov ax, 4c00H 9 int 21h 10 code ends 11 end
1 assume cs:code 2 code segment 3 mov ax, 0ffffH //大于9FFFH的十六进制数据,A000H,B000H,FFFEH,FFFFH在书写时是以字母开头的,而在汇编程序中, 数据不能以字母开头.所以要在前面加0,如0FFFE 4 mov ds, ax 5 mov bx, 6H 6 7 mov al, [bx] 8 mov ah, 0 9 10 mov dx, 0 11 12 mov cx, 3 13 s:add dx, ax 14 loop sa 15 16 mov ax, 4c00H 17 int 21H 18 code ends 19 end 20
原文:http://www.cnblogs.com/galoishelley/p/3543120.html