复习汇编语言(2)

Hello world,hello blog!

Posted by 吴柚 on April 5, 2019

内存定位

  1. and 逻辑与指令,按位进行与运算

通过该指令可将操作对象的相应位设为0,其他位不变

将AL的第六位设为0:and al,10111111B

  1. Or 逻辑或指令,按位进行或运算

通过该指令可将操作对象的相应位设为1,其他位不变

将AL的第六位设为1:or al,01000000B

  1. A :41H,01000001B ;a : 61H,01100001B.

就ASCII码的二进制形式来看,除第5位外,大写字母和小写字母的其他各位都一样。

大写字母的ASCII码第五位为0,小写字母的第五位为1.

  1. SI和DI是8086CPU中和bx功能近似的寄存器,SI和DI不能够分成两个8位寄存器来使用。

数据处理

    1. 四个寄存器:BX SI DI BP 这四个寄存器可以单个出现,或只能以四种组合出现:BX和SI ,BX和DI ,BP和SI ,BP和DI。使用寄存器BP,而指令中没有显性地给出段地址,段地址就默认在SS中。
Mov ax,[bp]             :  (ax)=((ss)*16+(bp))

Mov ax,[bp+si+idata] :  (ax)=((ss)*16+(bp)+(si)+idata)
  1. 数据处理:读取,写入,运算。

机器指令并不关心数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的位置。指令在执行前,所要处理的数据可以在三个地方:CPU内部,内存,端口 ``` Mov bx,[0] 内存,ds:0单元

Movbx,ax CPU内部,ax寄存器

Mov bx,1 CPU内部,指令缓冲器 ```

  1. 8086CPU的指令,可以处理两种尺寸的数据,byte 和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。

通过寄存器名指明要处理的数据的尺寸;

没有寄存器名存在的情况下,用操作符byte ptr 和 word ptr指明内存单元的长度.

  1. DIV除法指令,使用时需知:

除数:有8位和16位两种,在一个寄存器或内存单元中

被除数:除数为8位:被除数为16位,默认在AX中存放;

除数为16位:被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

结果:如果除数为8 位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

  1. dup操作符,同db,dw,dd等一样,是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复。

Db/dw/dd 重复的次数 dup (重复的字/字节/双字数据)

Db 3 dup (‘abc’, ‘ABC’)

解题进展

在文档中所给出的地址中下载了解题所需的文件,在Linux虚拟机中打开。面对第一个任务需要使用相应的工具(例如IDA)来对myvm进行分析,但是在安装IDA所需的依赖库时一直出现问题,今天并没有解决掉问题,明天继续尝试解决、或者尝试其他的工具。