曲曲的秘密学术基地

纯化欲望、坚持严肃性

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


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

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

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

loop 和[bx]的联合应用

问题: 计算ffff:0~ffff:b单元中的数据和,结果存储在dx中。

分析上述问题,

  1. 运算结构是否会超出dx存储范围。不会,因为ffff:0~ffff:b内存单元中每一位都是字节型数据,累加12个不会超出ds的最大存储范围(65535)。
  2. 因为ffff:0~ffff:b数据是8位的,不能直接加到16位寄存器dx中。
  3. 如果直接将ffff:0~ffff:b中的数据累加到dl中,而设置$(dh)=0$,12个8位数据全部累加到8位数据的dl中,很可能会造成进位丢失。

总结问题:

  1. (dx)=(dx)+内存中的8位数据 —> 会不匹配
  2. (dl)=(dl)+内存中的8位数据 —> 会发生越界问题

解决办法:

用一个16位寄存器作为中介,把内存单元中的每一位都复制到16位寄存ax中。

数学表达:

$$\begin{array}{c}\\ {\mathrm{sum}=\sum_{\mathrm{X}=0}^{0bH}\left(\mathrm{ffffh}^{*} 10 \mathrm{h}+\mathrm{X}\right)}\end{array}$$

代码如下:

assume cs:code
code segment

    mov ax, 0ffffh
    mov ds, ax
    mov bx, 0
    mov dx, 0
    mov cx, 12
s:  mov al, [bx]
    mov ah, 0
    add dx, ax
    inc bx
    loop s

    mov ax, 4c00h
    int 21h

code ends
end

5.6 段前缀

  1. mov ax, ds:[bx]
  2. mov ax, cs:[bx]
  3. mov ax, ss:[bx]
  4. mov ax, es:[bx]
  5. mov ax, ss:[0]
  6. mov ax, cs:[0]

这些出现在访问内存单元的指令中,用于指明内存单元的段地址的”ds:”…被称为段前缀

Last One

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

5.7 一段安全的空间 我们需要直接向一段内存中写入内容。 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误。 DOS方式下,一般情况,0:200~0:2ff(256字节)空间中没有系统或其他程序的数据或代码。 以后,我们需要直接向一段内存中写入内容时,就是用0:200~0:2ff这段空间。5.8 段前缀的使用我们可以利用段前缀来简化代码,如下面这个例子:将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。assume cs:c...…

汇编语言More
Next One

python 爬虫豆瓣热门电影学习

本文为学习鱼c论坛相关课程视频笔记,观看原视频访问这里。Requests,与BeautifulSoup模块的安装pip install requestspip install bs4解析网页内容使用BeautifulSoup模块,将复杂的网页结构转化为书籍目录的形式。代码示例import requestsimport bs4res = requests.get("http://movie.douban.com/top250")soup = bs4.BeautifulSoup(res.tex...…

pythonMore