inc include


inc include

文章插图
大家好,小跳来为大家解答以上的问题 。include,inc这个很多人还不知道,现在让我们一起来看看吧!
1、DATA SEGMENT 数据段开始 DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24 第一个变量da1 为字节类型dbCOUNT EQU $-DA1count是一个常量因为用了equ 其值为$-da1,后面会解释NUM DB ?num是变量名类型是db也就是字节 其内容未知所以用了问号DATA ENDS 代表数据段结束以上是数据段定义代码段开始COSEG SEGMENTASSUME CS:COSEG,DS:DATA 将各个段的首址放入对应的段寄存器 ST: MOV AX,DATAst代表一个标号,也就是这一段程序的开始意思为start 这个标号可以随意在汇编语言中如果出现冒号 。
2、则冒号前的字符串就是程序的标号mov ax,data 意思是将数据段的首地址放入ax中MOV DS,AX mov ds,ax 就是将ax的内容放入数据段寄存器ds中由于段寄存只能进行16位的读写 。
3、因此需要用ax来倒一下MOV SI,OFFSET DA1将变量da1的偏移地址放入寄存器si中MOV CX,COUNT-1count=$-da1 其中$为 以da1为首址的数据段结束之后的下一个地址而da1是这个数据段的首地址也就是2的地址,count-1就计算了da1这段数据的字节数 , 由于每个数据都是字节类型 。
4、它实际代表的是以从2开始的数据个数XOR BL,BL xor代表异或运算,bl内的值和bl自身做异或一定是等于一的EXCHG: MOV AL,[SI] exchg是一个标号,这一句是将si中的内容所指向的单元的数据放入al 。
5、也就是将2放入al中XOR AL,[SI+1] si中的内容所指向的单元的下一个单元中的数据与al做异或 实际就是相邻两个数作异或了在第一次循环时是2与-3异或00000010和11111101结果是0xff,放入alTEST AL,80H test的功能是将两个数相与,但不进行赋值操作 。
6、这里是将al中的数与0x80相与,结果不为零JE NEXTje代表为零跳转 , 上一步操作不为零 。
7、因此不跳到next而去执行inc blINC BLinc代表自增,将bl的内容自增,bl内容从0增到1NEXT: INC SI si的内容自增 。
8、在下一次循环中[si]的内容将会是-3而不是2,因为si的内容增了1,相当于指针的自增操作 。
9、指向下一个单元LOOP EXCHG loop的意思是如果cx中的内容不为零则跳转到标号处,标号是exchg则跳入exchgMOV NUM,BL 当cx变为零的时候 , 也就是当遍历了da1为首址的数据段后 终止循环 。
10、将bl的值送入num中,num 是前面数据段定义的一个变量例行公事,终止这段汇编指令 。
11、通过21h号中断实现MOV AX,4C00H INT 21HCOSEG ENDS 代码段结束 END ST st标号结束 。
【inc include】本文到此分享完毕 , 希望对大家有所帮助 。