汇编基础格式
assume cs:codesg;assume将段和相关段寄存器关联起来
codesg segment;abc segment...abc ends 定义一个段名为abc的段
mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax
mov ax,4c00h;返回
int 21h
codesg ends
end;汇编程序结束标记
;汇编的流程
;edit编程->.asm->masm编译->.obj->link连接->.exe->command加载->内存条的程序->CPU运行
一些指令
loop指令
(cx)=(cx)-1
if cx!=0
转至标号处执行程序
elseif cx==0
向下执行
end
sample1 :2^12
assume cs:code
code segment
mov ax,2
mov cx,11
s:add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end
sample2
assume cs:code
code segment
;计算FFFF:0006单元中的数乘3,结果存储在dx中
;要先把地址指向ffff:0006
mov ax,0ffffh;数字不能以字母开头,要加0
mov ds,ax
mov bx,6
mov ax,[bx]
mov ah,0h
mov cx,3
mov dx,0
s:add dx,ax
loop s
mov ax,4c00h
int 21h
end
注意,debug和masm对指令的处理是不同的
mov ax,[0]
;debug:将ds:0处的数据送入ax中
;masm:将0送入ax中
;在源程序中实现将内存2000:1单元的数据送入al中:
;用寄存器
mov ax,2000h
mov ds,ax
mov bx,1
mov al,[bx]
;显式给出段地址所在的段寄存器
mov ax,2000h
mov ds,ax
mov al,ds:[1]
课后练习:
1.向内存0:200-0:23f依次传送数据0-63
assume cs:code
code segment
;向内存0:200-0:23f依次传送数据0-63
mov ax,20h ;0:200等价于20:0
mov ds,ax
mov bx,0
mov cx,40h
s: mov ds:[bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end