![]() |
#2
zklhp2013-03-28 14:25
1、将结果数据取偏移地址送DI ,自己看到有两条指令
LEA DI,RESULT MOV DI,OFFSET RESULT Q:这两条指令的作用是完全相同的吗?是否可以相互替换。 A: offset是伪指令 是在编译的时候决定的 lea是指令 是运行的时候决定 对初学者来说可以认为是一样的 2、DI 和[DI] 有什么区别?希望能举例说明。 A: mov ax, di ;di的值放到ax里 mov ax, [di] ;di所指向的内存里面的值放ax里 这里就相当于C语言里面的指针 3、书上解释MOVSB指令以±1形式修改偏移地址,我在看书的过程中发现 例题的程序解释为 修改偏移地址+1. Q:如何判断+1和-1的情况,或者说不需要判断? A: 一般用递增 但也可以用递减 符号位控制 我看的书上就有 字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的。字符串操作指令可对内存单元按字节、字或双字进行处理,并能根据操作对象的字节数使变址寄存器SI(和DI)增减1、2或4。具体规定如下: (1)、当DF=0时,变址寄存器SI(和DI)增加1、2或4; (2)、当DF=1时,变址寄存器SI(和DI)减少1、2或4。 4、有一个程序题目是判断16个10位二进制数是否小于等于200H。但是在程序编写过程中给出了下面几条指令 PRO: MOV AH,BYTE PTR SOURCE[BX] MOV AL,BYTE PTR SOURCE[BX+1] CMP AX, 8000H Q: 程序中对AX和8000H 进行比较,是书本的错误,还是因为数值移位,所以要写8000H? A: 牵扯有符号数在计算机中的补码表示方法 具体你看其他的书罢 简单来说 对于有符号数 比如字(word) 负数的最高位也就是符号位是1 换算过来就是8000H到0FFFFh之间的那些数 8000H 就是二进制的 1000 0000 0000 0000 这个是常识 建议你看其他书学习一下 5、有符号条件转移和无符号条件转移在什么场合下要进行区别?书上对于带符号条件数的转移采用了一个表格,表格说明中这样写到: JG/JNLE 高于/低于且不等于时转移 JGE/JNL 高于或等于/低于时转移 JL/JNGE 高于/低于时转移 我现在对这几个解释十分的不了解,比如第二个 高于或等于/低于时转移 那不是包含和所以的情况嘛,岂不是成了任何情况下都会转移?我知道我的理解有问题,所以希望前辈们指正。 A: 你理解的不对 书上的意思是 JGE是 高于或等于时转移 JNL 是 低于时转移 分开写了而已 最后我想问,条件转移指令多而复杂,要全部记下来有很大的困难,而且很容易混淆,请问前辈们有什么实用的区分方法?希望能不吝赐教。谢谢大家~~~ A: 和其他指令一样 根据英语来记 比如jne 就是 Jump Not Equal jge就是 Jump Greater or Equal 当然 如果你看不懂这几个英语词建议去学学基本英语罢 高中英语水平是必须的。。。 [ 本帖最后由 zklhp 于 2013-3-28 14:27 编辑 ] |
1、将结果数据取偏移地址送DI ,自己看到有两条指令
LEA DI,RESULT
MOV DI,OFFSET RESULT
Q:这两条指令的作用是完全相同的吗?是否可以相互替换。
2、DI 和[DI] 有什么区别?希望能举例说明。
3、书上解释MOVSB指令以±1形式修改偏移地址,我在看书的过程中发现 例题的程序解释为 修改偏移地址+1.
Q:如何判断+1和-1的情况,或者说不需要判断?
4、有一个程序题目是判断16个10位二进制数是否小于等于200H。但是在程序编写过程中给出了下面几条指令
PRO: MOV AH,BYTE PTR SOURCE[BX]
MOV AL,BYTE PTR SOURCE[BX+1]
CMP AX, 8000H
Q: 程序中对AX和8000H 进行比较,是书本的错误,还是因为数值移位,所以要写8000H?
5、有符号条件转移和无符号条件转移在什么场合下要进行区别?书上对于带符号条件数的转移采用了一个表格,表格说明中这样写到:
JG/JNLE 高于/低于且不等于时转移
JGE/JNL 高于或等于/低于时转移
JL/JNGE 高于/低于时转移
我现在对这几个解释十分的不了解,比如第二个 高于或等于/低于时转移 那不是包含和所以的情况嘛,岂不是成了任何情况下都会转移?我知道我的理解有问题,所以希望前辈们指正。
最后我想问,条件转移指令多而复杂,要全部记下来有很大的困难,而且很容易混淆,请问前辈们有什么实用的区分方法?希望能不吝赐教。谢谢大家~~~