当前位置:编程学习 > 汇编语言 >>

汇编语言程序的一道题。求高手解答!!!

START:MOV AX,01H MOV BX,02H MOV CX,03H MOV DX,04H NEXT:INC AX ADD BX,AX SHR DX,1 LOOPE NEXT 程序执行完后AX,BX,CX,DX的值是多少? 答案是:2,4,3,1 为什么啊???我自己算总算不到这个数字。。求高手告知啊!!!!感激不尽@!
追问:SHR DX,1 此时dx为1 这个是为什么?dx本来是4的啊你自己说的DX=1,又说DX等于2,呵呵en 谢谢你了
答案:你的答案是错的
答案是ax=2,bx=4,cx=2,dx=2 你可以自己编写一个程序调试

START:MOV AX,01H
           MOV BX,02H
           MOV CX,03H
           MOV DX,04H
;前面4行使ax=1,bx=2,cx=3,dx=4

NEXT:INC AX                          ;ax+1执行后ax=2
          ADD BX,AX                    ;bx=bx+ax执行后bx=4
          SHR DX,1                     ;dx向右移一位,相当于dx除于2,执行后dx=2
          LOOPE NEXT               ;重点来了,这一行的loope他的执行具体是,先使cx减1,然后再判断cx是否等于零,并且判断标志位ZF是否等于1,如果cx<>0并且zf=1那么就转到标号,否则退出循环.上一行的shr dx.1是影响ZF的,结果ZF是等于0,所以这里退出循环,执行完后cx=2
其他:START:MOV AX,01H
           MOV BX,02H
           MOV CX,03H
           MOV DX,04H
这个懂吗?
:INC AX  此时ax=2
ADD BX,AX  此时bx=4
SHR DX,1 此时dx为1
c没有变还是3
所以abcd依次为2431.。。。。。。。。。。。。。。。
 LOOPE NEXT退出了next程序 MOV AX,01H------->AX=1
MOV BX,02H------->BX=2
MOV CX,03H------->CX=3
MOV DX,04H------->DX=4
INC AX-------->AX=AX+1=1+1=2
ADD BX,AX------>BX=BX+AX=2+2=4
SHR DX,1-------->就是把DX的值向右移一位,即DX=2 
然后是怎么循环的我就不知道了,你这个不是一个完成的程序吧? 不知道 用汇编生产exe程序
然后用debug调试(开始—运行—debug)
这样你就可以一步一的跟着你的程序走
你能清楚的看到你内存和寄存器的变换
原本现在学汇编就是要了解内存和寄存器的变换,而debug给你提供了一个很好的环境
以后有不懂的就用debug调试
如果程序太大你可以用OD调试
至于debug怎么用你可以到网上去搜索下 

上一个:汇编语言问题 :求1+2+3+.........+10的和 用汇编语言 麻烦了
下一个:汇编语言中16进制表示法4E20 分别是啥意思

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,