在汇编语言中NUM,COSEG,OFFSET,EXCHG,INC,INT是什么意思啊?

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:19:06
一以面的这个程序为例吧,讲讲它的各个部分的意思!
DATA SEGMENT
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24
COUNT EQU $-DA1
NUM DB ?
DATA ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA
ST: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DA1
MOV CX,COUNT-1
XOR BL,BL
EXCHG: MOV AL,[SI]
XOR AL,[SI+1]
TEST AL,80H
JE NEXT
INC BL
NEXT: INC SI
LOOP EXCHG
MOV NUM,BL
MOV AX,4C00H
INT 21H
COSEG ENDS
END ST

DATA SEGMENT 数据段开始
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24 第一个变量da1 为字节类型db

COUNT EQU $-DA1 count是一个常量因为用了equ 其值为$-da1,后面会解释

NUM DB ?
num是变量名 类型是db也就是字节 其内容未知所以用了问号

DATA ENDS 代表数据段结束
以上是数据段定义
代码段开始
COSEG SEGMENT

ASSUME CS:COSEG,DS:DATA 将各个段的首址放入对应的段寄存器

ST: MOV AX,DATA st代表一个标号,也就是这一段程序的开始意思为start 这个标号可以随意在汇编语言中如果出现冒号,则冒号前的字符串就是程序的标号

mov ax,data 意思是将数据段的首地址放入ax中

MOV DS,AX mov ds,ax 就是将ax的内容放入数据段寄存器ds中由于段寄存只能进行16位的读写,因此需要用ax来倒一下

MOV SI,OFFSET DA1 将变量da1的偏移地址放入寄存器si中

MOV CX,COUNT-1 count=$-da1 其中$为 以da1为首址的数据段结束之后的下一个地址而da1是这个数据段的首地址
也就是2的地址,count-1就计算了da1这段数据的字节数,由于每个数据都是字节类型,它实际代表的是以从2开始的数据个数

XOR BL,BL xor代表异或运算,bl内的值和bl自身做异或一定是等于一的

EXCHG: MOV AL,[SI] exchg是一个标号,这一句是将si中的内容所指向的单元的数据放入al,也就是将2放入al中

XOR AL,[SI+1] si中的内容所指向的单元的下一个单元中的数据与al做异或 实际就是相邻两个数作异或了在第一次循环时是2与-3异或00000010和11111101结果是0xff,放入al

TEST A