曲曲的秘密学术基地

纯化欲望、坚持严肃性

欢迎!我是曲泽慧(@zququ),目前在深圳(ICBI,BCBDI,SIAT)任职助理研究员。


病毒学、免疫学及结构生物学背景,可以在 RG 上找到我已发表的论文

本站自2019年7月已访问web counter

汇编语言 9.7 9.8 jcxz loop 指令

9.7 jcxz 指令

jcxz 指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为:-128~127。

指令格式:

jcxz 标号(如果(cx)=0, 转移到标号处执行。)

操作:

当(cx)=0时,(IP)=(IP)+8位位移;

8位位移 = 标号处的地址 - jcxz指令后的第一个字节的地址;

8位位移的范围为-128~127,用补码表示;

8位位移由编译程序在编译时算出。

当(cx)!=0时,程序继续向下执行。

我们从jcxz的功能中可以看出,jcxz 标号 的功能相当于:

if((cx)==0) jmp short 标号;

问题(1)

补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

assume cs:code
code segment
  start:mov ax, 2000H
        mov ds, ax
        mov bx, 0
      s:______
        ______
        ______
        ______
        jmp short s
     ok:mov dx, bx
        mov ax, 4c00h
        int 21h
code ends
end start

分析一下题意,即为按顺序将2000H段地址中的数据来给cx赋值,然后当cx = 0时,直接跳转到ok:处,将此时的偏移地址保存到dx中结束程序。但是要注意题中所讲为一个字节一个字节查找,所以应当将cx拆开两个高位和低位寄存器来考虑。

所以横线处代码应该依次为,

mov cl, [bx]
mov ch, 0
jcxz ok
inc bx

9.8 loop指令

loop指令与jcxz正好相反,为循环指令,所有的循环执行都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围为:-128~127。

指令格式:

loop 标号((cx)=(cx)-1,如果(cx)!=0,转移到标号处执行。)

操作:

(1) (cx)=(cx)-1;

(2) 如果(cx)!=0, (IP)=(IP)+8位位移。

8位位移=标号处的地址-loop指令后的第一个字节的地址;

8位位移的范围为-128~127,用补码表示;

8位位移由编译程序在编译时算出。

如果(cx)=0,什么也不做(程序向下执行)。

我们从loop的功能中可以看出,loop 标号的功能相当于:

(cx)--
if((cx)!=0) jmp short 标号;

问题(2)

补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。

asuume cs:code
code segment
  start:mov ax, 2000H
        mov ds, ax
        mov bx, 0
      s:mov cl, [bx]
        mov ch, 0
        ______
        inc bx
        loop s
     ok:dec bx
        mov dx, bx
        mov ax, 4cooh
        int 21h
code ends
end start

分析题意,注意loop标号执行时候的规则,每次loop s都会令cx寄存器的值,(cx)=(cx)-1,但如果(cx)-1=0就会跳出循环,所以横线处的代码应该为,

inc cx
Last One

python爬取ncbi检索信息的摸索(2) 找到隐藏背后的真实地址

在用python requests爬取ncbi数据库时候,会有个苦恼的地方,就是在通过ncbi数据库检索到蛋白后,地址栏给出的地址是隐藏的,即使你通过该出的该地址也无法打开对应的地址网页,也就无法正常爬取网页信息,如下图所示,可以看到即使我更改Summary为Fasta,并且将20 per page更改为200 per page,也无法看到完整的地址信息,下面我来介绍如何将完整的地址找到,首先inspect,并查看Network 选项,要注意重新刷新,比如说将20 per page更改为2...…

pythonMore
Next One

汇编语言 9.4 9.5 9.6 转移的目的地址以及转移地址在寄存器和内存中的jmp指令

9.4 转移的目的地址在指令中的jmp指令之前的jmp指令语法都是相当于当前IP的转移位移。jmp far ptr 标号 该命令实现的是段间转移,这种转移也被成为远转移。功能如下:(CS)=标号所在段的段地址;(IP)=标号在段中的偏移地址。如下指令,assume cs:codesg codesg segment start:mov ax, 0 mov bx, 0 jmp far ptr s db 256 dup (0) ...…

汇编语言More