主题:一点概念性的小问题,希望朋友积极回答我,谢谢
shujujiegou01
[专家分:1070] 发布于 2006-11-14 09:22:00
CF∨ZF=0
中间的∨是什么意思?
//////////////////////////////////////////////////////////
MOV AH,1
INT 21H
AND AL,11011111B ;为什么能小写转大写?
////////////////////////////////////////////////////
还有无条件转移指令JMP,我区分不出来
段内 :直接转移
间接转移
段间:直接转移
间接转移
我看了教程也区分不出来
还有什么短转移和近转移
麻烦各位朋友帮小弟理顺下思路
回复列表 (共4个回复)
沙发
tld5yj [专家分:1310] 发布于 2006-11-14 20:53:00
"∨"是或的意思;如果你的那个能让大写转小写,那么AL里存的就是你输入字符的ASCII码,AND 11011111B就是把它的ASCII码变一下,对了,问一下,那个AND是不是ADD呀?至于转移我也不太明白,但是段内和段间你应该明白吧?数据段,代码段,堆栈段,附加数据段之间,如果从一个里进入到另一个里就是段间了,如果没有出某个段就是段内呗,近转移和短转移我就不太明白了,你再等等别人的答案吧,我前面说得还不一定对呢,应该没问题。
板凳
yhc910 [专家分:150] 发布于 2006-11-16 07:53:00
短是指要跳至的目标地址与当前地址前后相差不超过128字节;
近是指跳转的目标地址与当前地址在用一个段内,即CS的值不变,只改变IP的值;
远(FAR类型)指跳到另一个代码段去执行,CS/IP都要改变。
3 楼
天空未蓝 [专家分:360] 发布于 2006-11-18 16:10:00
还是个ASCII码问题。
英文大小写字母在寄存器中是以ASCII码方式存放的。大写字母的高4位为0100和0101,小写字母的低4位位0110和0111,低4位大小写都一样。
AND AL,11011111B使得AL寄存器内的高4位与成相应大写字母的高4位,低4位不变,从而实现功能。
4 楼
a4099369 [专家分:140] 发布于 2006-11-18 21:56:00
关于JMP的问题
这是一个无条件转移
JMP 指令 要给出两种信息,
转移目的地址
转移的距离
它是用来修改ip的指向
在段内 用short时候可以修改为-128~~127 2的八次方
在段内 用far的时候可以修改二的16次方
在段外的时候就是修改的是cs 与 ip 的值
如果还不是很懂的话,我们继续来看
CPU是如何来执行命令的
(说的很粗糙)根据cs和ip 来确定指令所在的内存位置,然后把指令放到缓冲器里,然后 修改ip的大小 命令执行 然后继续根据 cs和IP所确定的位置来读取命令
(如果加入了jmp后) 当CPU执行了CS和IP所确定的数据位置,本来应该已经修改好了的IP去执行的,但是此时执行的JMP这个命令,JMP直接修改了IP的大小 ,所以就不会按照以前的IP执行了,所以这里有个先后顺序,先自动修改IP的大小,等执行完指令后,在去执行IP,这个时候IP可能变也可能不发生变化
下面 谈谈段内的JMP 转移(谈谈是简谈,呵呵,我也是刚刚了三个星期的小菜)
assume cs:code
code segment
start:mov ax,0 这就是一个错误的跳转因为,对于short他只能在段内的
mov bx,0 上下127进行跳转,这显然是不行的
jump short s 我们只需要把 short变成far就可以了
db 256 dup(0) short-8位
s: add ax,1 far- 16位 数字即是 直接,符号 就是间接
inc ax
code ends
end
段外转移
这里我们跳转后面跟的是一个标号,我们还可以来用内存来进行跳转
如果我们想突然跳到段地址为0520 偏移地址为1314的地方 我们应该怎么办呢
(这就是一个段外的转移)
mov ax,0e314H
mov ds:[0],ax
mov word ptr ds:[2],0
jmp dword ptr ds:[0]
执行这个命令以后 IP=1314H CS=0H 这里我们要注意的就是 IP和cs 都是16位置的寄存器 一个IP和CS可以装两个字节 他们的大小是0000H-FFFFH但是当最左边的数字是A-F的时候,对数字直接操作要在前面假零(~~。。~~`)
这就是段外的转移,我们也可以叫他段外间直接转移 因为它是直接对数字进行操作的
我来回复