回 帖 发 新 帖 刷新版面

主题:一点概念性的小问题,希望朋友积极回答我,谢谢

CF∨ZF=0
中间的∨是什么意思?

//////////////////////////////////////////////////////////

MOV AH,1
INT 21H
AND AL,11011111B   ;为什么能小写转大写?


////////////////////////////////////////////////////
还有无条件转移指令JMP,我区分不出来
段内 :直接转移
      间接转移
段间:直接转移
     间接转移

我看了教程也区分不出来
还有什么短转移和近转移

麻烦各位朋友帮小弟理顺下思路

回复列表 (共4个回复)

沙发

"∨"是或的意思;如果你的那个能让大写转小写,那么AL里存的就是你输入字符的ASCII码,AND 11011111B就是把它的ASCII码变一下,对了,问一下,那个AND是不是ADD呀?至于转移我也不太明白,但是段内和段间你应该明白吧?数据段,代码段,堆栈段,附加数据段之间,如果从一个里进入到另一个里就是段间了,如果没有出某个段就是段内呗,近转移和短转移我就不太明白了,你再等等别人的答案吧,我前面说得还不一定对呢,应该没问题。

板凳

短是指要跳至的目标地址与当前地址前后相差不超过128字节;
近是指跳转的目标地址与当前地址在用一个段内,即CS的值不变,只改变IP的值;
远(FAR类型)指跳到另一个代码段去执行,CS/IP都要改变。

3 楼


还是个ASCII码问题。
英文大小写字母在寄存器中是以ASCII码方式存放的。大写字母的高4位为0100和0101,小写字母的低4位位0110和0111,低4位大小写都一样。
AND AL,11011111B使得AL寄存器内的高4位与成相应大写字母的高4位,低4位不变,从而实现功能。

4 楼


关于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的时候,对数字直接操作要在前面假零(~~。。~~`)
这就是段外的转移,我们也可以叫他段外间直接转移 因为它是直接对数字进行操作的

我来回复

您尚未登录,请登录后再回复。点此登录或注册