曲曲的秘密学术基地

纯化欲望、坚持严肃性

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


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

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

汇编语言 5.7 5.8 安全空间,段前缀的使用,附加段

5.7 一段安全的空间

  1. 我们需要直接向一段内存中写入内容。
  2. 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误。
  3. DOS方式下,一般情况,0:200~0:2ff(256字节)空间中没有系统或其他程序的数据或代码。
  4. 以后,我们需要直接向一段内存中写入内容时,就是用0:200~0:2ff这段空间。

5.8 段前缀的使用

我们可以利用段前缀来简化代码,如下面这个例子:

将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。

assume cs:code
code segment
    mov bx, 0
    mov cx, 12

s:  mov ax, 0ffffh
    mov ds, ax
    mov dl, [bx]

    mov ax, 0020h
    mov ds, ax
    mov [bx], dl

    inc bx
    loop s

    mov ax, 4c00h
    int 21h

code ends
end

可以通过添加另外一个段寄存器es(附加段)来实现减少ds在循环中的设置次数:

assume cs:code
code segment
    mov ax, 0ffffh
    mov ds, ax

    mov ax, 0020h
    mov es, ax

    mov bx, 0

    mov cx, 12

s:  mov dl, [bx]
    mov es:[bx], dl
    inc bx
    loop s

    mov ax, 4c00h
    int 21h

code ends
end
Last One

汇编语言 实验4 [bx]和loop的使用

实验4 [bx]和loop的使用问题1:编程, 向内存0:200~0:23F依次复制数据0~63(3FH)。assume cs:codecode segment mov ax, 0020h ;0:200~0:23F相当于0020h:0~0020h:23f mov ds, ax mov bx, 0 mov cx, 64s: mov ds:[bx], bl ;这里因为直接从0开始复制 inc bx loop s mov ax, 4c00h...…

汇编语言More
Next One

汇编语言 5.5 5.6 loop与[bx]的联合应用 段前缀

loop 和[bx]的联合应用问题: 计算ffff:0~ffff:b单元中的数据和,结果存储在dx中。分析上述问题, 运算结构是否会超出dx存储范围。不会,因为ffff:0~ffff:b内存单元中每一位都是字节型数据,累加12个不会超出ds的最大存储范围(65535)。 因为ffff:0~ffff:b数据是8位的,不能直接加到16位寄存器dx中。 如果直接将ffff:0~ffff:b中的数据累加到dl中,而设置$(dh)=0$,12个8位数据全部累加到8位数据的dl中,很可能会造成进...…

汇编语言More