刚刚开始自学汇编,左移右移一般实现什么功能
MOV CL,4MOV AX,〔2000H〕
SHL AL,CL
SHR AX,CL
MOV 〔2000H〕,AX
试问若程序执行前,数据段内(2000H)=09H,(2001H)=03H,则执行后有(2000H)=(?),(2001)=(?)该程序实现什么功能?
本帖最后由 Dardy 于 2013-7-10 15:47 编辑
执行后有=39H,=00H
不知道怎么概括这段代码的功能。
每左移一位相当于乘以2,左移4位相当于乘以16
每右移一位相当于除以2 本帖最后由 メ㊣逆ご帅☆ 于 2013-7-11 11:10 编辑
抱歉看错了编辑下
把mov ax,
看成mov ax,2000h了。。
MOV CL,4
MOV AX,〔2000H〕
SHL AL,CL
SHR AX,CL
MOV 〔2000H〕,AX
试问若程序执行前,数据段内(2000H)=09H,(2001H)=03H,则执行后有(2000H)=(?),(2001)=(?)该程序实现什么功能?
程序实现的功能没有实际意义(这里的实际意义的意思就是比如播放MP3之类的有意义的事情)
就是将AL左移4位,然后将AX右移4位,最后把AX的值放给内存2000h-2001h位置(因为2000h不够放AX所以会拖2001h这个基友一起放AX)
那么开始将下该程序的功能
首先在执行shl al,cl之前,AX=【2000H】=0309h,shl al,cl这语句的意思就是把cl中存储的数作为左移的位数,然后将al左移
CL这里等于4
也就是将al左移四位(这里的位指的是二进制的位)
AX=0309h
那么AL就等于AX的低八位也就是09h
那么将al左移4位就等于将09h左移4位
看下09h的二进制1001b
左移4位也就是把1001一起往前移动4位,然后在后面添4个0
也就是10010000b
也就是90H
这时候ax =0390h
然后shr ax,cl
将0390h右移4位
首先看看2000h的二进制
1110010000b
右移四位也就是把最右边的四位舍去,然后最前面添加4个0、
也就是变成0000111001b
也就是39h啦
那么这时候AX=0039H
然后mov ,ax
但是2000h这个地方只能放一个字节(最大FFh),不够放200h,所以只好拖它的好基友2001h(往高地址拖人)来存放高8位
自己存放低八位
总结就是:
执行后有(2000H)=(AX中的低8位也就是AL的值39h),(2001)=(AX中的高8位也就是ah的值00h)
至于左右关于左移右移的常见功能,比如就如楼上版主所说的
每左移一位相当于乘以2,左移4位相当于乘以16
每右移一位相当于除以2、
当然还有其他的功能比如说,那个,给你讲个32位的故事吧,32位寄存器EAX是AX的爸爸,
当时他并不像ax一样可以分成AH AL这样,只有EAX和AX,所以有时候我们
EAX=20000000h,中的高16位2000h我们想把它移到低16位,这时候右移指令就出场了
shr eax,16就可以实现我们要的东西了
当然还有其他运用,比如加密解密之类的
比较啰嗦了点。希望你不要介意哈。这样讲应该比较好懂 Dardy 发表于 2013-7-10 15:46 static/image/common/back.gif
执行后有=39H,=00H
不知道怎么概括这段代码的功能。
恩恩,我们作业居然要概括功能,这个我也搞不清楚 メ㊣逆ご帅☆ 发表于 2013-7-10 21:57 static/image/common/back.gif
MOV CL,4
MOV AX,〔2000H〕
SHL AL,CL
谢谢你呀,花这么长时间跟我解释。。。 本帖最后由 メ㊣逆ご帅☆ 于 2013-7-11 11:14 编辑
把mov ax,看成mov ax,2000h了
编辑下
不用谢啦,最近很闲。概括啊,应该就是将(09h)*10h(或者说左移4位)然后把(0390h)÷10h(或者说右移4位)最后将结果存放到2000h-2001h这段内存中吧
我晕差点误导别人。。。。
MOV CL,4
MOV AX,〔2000H〕//AX = 03 09
SHL AL,CL //AX = 03 90
SHR AX,CL //AX = 00 39
MOV 〔2000H〕,AX Dardy 发表于 2013-7-11 02:59 static/image/common/back.gif
MOV CL,4
MOV AX,〔2000H〕//AX = 03 09
SHL AL,CL //AX = 03 90
主要是功能呀,这功能好像不怎么容易概括。。。 说简单一点,左右移动就是乘它的进制,以十进制来说,你就明白,5*10=50等同5向左移一位,5*100=500等同5向左移二位,十六进制就是乘16,二进制就是乘2,来表示移位,这样一说,你就明白啦。 左移左移是为了实现取出某一位的数据! 嗯是的。就是乘进制 感动,感动到眼泪就快出来了,, {:1_1:}
页:
[1]