汇编多个段的程序及内容注释
汇编语言第二版(王爽)的题
将a段和b段中的数据依次相加,将结果存到C段中,一次循环,程序如下。
// An highlighted block
assume cs:code ;code段使用cs寄存器,伪指令,段分配语句,建立段寄存器和段名之间关系
a segment ;定义a段
db 1,2,3,4,5,6,7,8 ;字节 为1,2,3,4,5,6,7,8
a ends ;a段结束标号
b segment ;定义b段
db 1,2,3,4,5,6,7,8 ;字节 为1,2,3,4,5,6,7,8
b ends ;b段结束标号
c segment ;定义c段
db 0,0,0,0,0,0,0,0 ;字节 为0,0,0,0,0,0,0,0 ,dw为16位的字,db为8位的字节
c ends ;c段结束标号
code segment ;设置code(代码)段
start: mov ax,a ;开始标号,a段地址给寄存器ax
mov ds,ax ;ax的a段地址给寄存器ds,ds指向a段地址
mov ax,b ;b段地址给寄存器ax
mov es,ax ;ax的b段地址给寄存器es,es指向b段地址
mov bx,0 ;ds:bx指向a段的第1个单元
mov cx,8 ;给计数CX寄存器记8次
s: mov al,[bx] ;地址[bx]的值给AL(AX低8位)
add al,es:[bx] ;寄存器AL的值和地址es:[bx]的值相加,所得的和存回寄存器AL
mov dx,c ;c段地址给寄存器ax
mov ds,dx ;ax的c段地址给寄存器ds,ds指向c段地址
mov [bx],al ;寄存器AL的值给偏移地址[bx]入栈
mov ax,a ;a段地址给寄存器ax
mov ds,ax ;重新将ds指向a段
inc bx ;bx的值自加1
loop s ;返回到S的地址
mov ax,4c00h ;给AX值4c00h
int 21h ;执行中断21h,参数:4c00h;程序结束,返回dos
code ends ;代码段结束标号
end start ;结束标号