内存定位
- and 逻辑与指令,按位进行与运算
通过该指令可将操作对象的相应位设为0,其他位不变
将AL的第六位设为0:and al,10111111B
- Or 逻辑或指令,按位进行或运算
通过该指令可将操作对象的相应位设为1,其他位不变
将AL的第六位设为1:or al,01000000B
- A :41H,01000001B ;a : 61H,01100001B.
就ASCII码的二进制形式来看,除第5位外,大写字母和小写字母的其他各位都一样。
大写字母的ASCII码第五位为0,小写字母的第五位为1.
- SI和DI是8086CPU中和bx功能近似的寄存器,SI和DI不能够分成两个8位寄存器来使用。
数据处理
-
- 四个寄存器: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)
- 数据处理:读取,写入,运算。
机器指令并不关心数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的位置。指令在执行前,所要处理的数据可以在三个地方:CPU内部,内存,端口 ``` Mov bx,[0] 内存,ds:0单元
Movbx,ax CPU内部,ax寄存器
Mov bx,1 CPU内部,指令缓冲器 ```
- 8086CPU的指令,可以处理两种尺寸的数据,byte 和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。
通过寄存器名指明要处理的数据的尺寸;
没有寄存器名存在的情况下,用操作符byte ptr 和 word ptr指明内存单元的长度.
- DIV除法指令,使用时需知:
除数:有8位和16位两种,在一个寄存器或内存单元中
被除数:除数为8位:被除数为16位,默认在AX中存放;
除数为16位:被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
结果:如果除数为8 位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
- dup操作符,同db,dw,dd等一样,是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复。
Db/dw/dd 重复的次数 dup (重复的字/字节/双字数据)
Db 3 dup (‘abc’, ‘ABC’)
解题进展
在文档中所给出的地址中下载了解题所需的文件,在Linux虚拟机中打开。面对第一个任务需要使用相应的工具(例如IDA)来对myvm进行分析,但是在安装IDA所需的依赖库时一直出现问题,今天并没有解决掉问题,明天继续尝试解决、或者尝试其他的工具。