bl和dl分别是AX中位为0和1的数量(和为16),AX最后为0
SHL AX,1左移AX1位并把高位放CF,后用0补,循环16次就是0了
JC则dl加1否则bl加1,循环16次
MOV DI,OFFSET BUFF 取数组BUFF的首地址到DI寄存器中
MOV CX,000AH 设定循环次数
MOV BL,0 做计数器用,用来记录数组BUFF中为0的字节的个数,赋初值为0
GOON:MOV AL,byte ptr [DI] 将数组的BUFF的一个字节的数据放进AL寄存器中
AND AL,AL AL中的数据与AL中的数据做与运算,用来作为下一条跳转指令的跳转条件
JNZ NEXT 上一条指令运算不为0就跳转到标号NEXT处
INC BL 若 and al,al 这条指令的运算结果为0,bl寄存器就加1
NEXT:INC DI dl加1,dl最开始是数组BUFF的首地址,加1相当于指向下一个字节
LOOP GOON CX先减1,判断CX是否为0,若为0就跳出循环,不为0就循环,循环从标号GOON处开始
HLT 停机
BUFF DB 23H,54H,00H,83H,98H,36H,00H,49H,00H,73H
这段汇编代码的作用是判断单元大小为一字节的数组BUFF中有多少个字节为0,并将结果保存在BL寄存器中
mov
cl,04;cl值为4
shl
dx,cl;逻辑左移4位
mov
bl,ah;ah中值送到bl中
shl
ax,cl;左移4位
shr
bl,cl;右移4位
or
dl,bl;二者异或 *** 作
结果是把
DX:AX
的32位值
左移
4位
以上就是关于这个程序完成什么功能啊,程序执行完后BL,DL,AX的内容分别是多少小弟初学汇编望高手指点。。。全部的内容,包括:这个程序完成什么功能啊,程序执行完后BL,DL,AX的内容分别是多少小弟初学汇编望高手指点。。。、汇编语言题目,求详解、下面一段程序完成什么 *** 作 MOV CL,04 SHR DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)