

- [jall] 他只是讲解,做个例子,实际上任何地址或者寄存器在使用前都需要确保没有程序在占用,覆盖数据的后果难以想 10/03 02:25
- [wsb200514] 哈哈,确实。看题目的意思ax里面肯定是有数据的,不然不会push它,既然有数据就不应该用ax去做数据 05/25 16:55
- [bluestorm80] 后来说这个闪烁的光标是显卡实现的。具体如何实现的,就先不管那么多了 11/23 17:08
- [younggay] en .... 11/18 14:17
- [younggay] 嗯。博主的思路都很合理。最后一种的思路很灵活,有味道。 11/18 13:32
- [scuzg] 结果很正确嘛! 视为无符号数,10-11不够减则借1位,被减数成了260,则: 260-11=2 11/05 13:39
- [tinyparticle] 程序完成 10/18 12:29
- [tinyparticle] 测试正确 10/15 18:00
- [bluestorm80] 正像前面研究的那样,栈是一种很重要的技术。在里面保存着下一条要执行的指令,至少目前我是这么看的。所以 10/15 06:54
- [scuzg] 执行loop语句时,IP值已经指向loop之下的那一条指令了。如果cx=0,那么CPU将读取当前IP 10/11 16:15
[2009-11-21 20:32] 关于DOS光标的初步研究
在DOS下面命令行中总有一个在闪烁的下划线,这个就是光标。不过一直找不到,它是如何实现。经过研究中断的代码后,找到了一点儿线索。就是内存字单元0000:0450保存着光标的位置坐标。低字节保存着列位置,高字节保存行位置。...
阅读全文 |
评论次数(1) |
浏览次数(840) |
所属类型(读书笔记)
[2009-11-19 16:32] 关于NEG命令
NEG的全文是negate,意思是否定。对于该命令执行的操作是用0减去操作数。也就是取其相反数。有的书上翻译成取补指令,容易与补码混淆。
补码的定义是:正数的补码是其原码,负数的补码是原码取反加1.
这一点要清楚。...
补码的定义是:正数的补码是其原码,负数的补码是原码取反加1.
这一点要清楚。...
阅读全文 |
评论次数(0) |
浏览次数(560) |
所属类型(读书笔记)
[2009-11-17 20:33] 存储器数据交换
有这样一个题目:
下列程序片段完成什么功能,可否有更简单的方法实现同样的功能?
XCHG AX,[SI]
XCHG AX,[DI]
XCHG AX,[SI]
其实这个片段可以从2个方面来看:
①交换了DS:SI与DS:DI两个字存储单元的内容
②DS:SI与DS:DI指向的内容进行了交换
我能想到的方法有下面的几种:
0000 start: ;利用堆栈交换
0000 21 FF 34 push [si]
0002 21 FF 35 push [di]
0004 22 8F 04 pop [si]
0006 22 8F 05 pop...
下列程序片段完成什么功能,可否有更简单的方法实现同样的功能?
XCHG AX,[SI]
XCHG AX,[DI]
XCHG AX,[SI]
其实这个片段可以从2个方面来看:
①交换了DS:SI与DS:DI两个字存储单元的内容
②DS:SI与DS:DI指向的内容进行了交换
我能想到的方法有下面的几种:
0000 start: ;利用堆栈交换
0000 21 FF 34 push [si]
0002 21 FF 35 push [di]
0004 22 8F 04 pop [si]
0006 22 8F 05 pop...
阅读全文 |
评论次数(1) |
浏览次数(799) |
所属类型(读书笔记)
[2009-11-13 10:47] MOV 指令周期数
0000 data segment
0000 00 VARX db ?
0001 0000 VARY dw ?
0003 data ends
;
0000 code segment
assume cs:code,ds:data
0000 4 B8 ---- R start:mov ax,data
0003 2 8E D8 mov ds,ax
0005 4 B8 0034 mo...
0000 00 VARX db ?
0001 0000 VARY dw ?
0003 data ends
;
0000 code segment
assume cs:code,ds:data
0000 4 B8 ---- R start:mov ax,data
0003 2 8E D8 mov ds,ax
0005 4 B8 0034 mo...
阅读全文 |
评论次数(0) |
浏览次数(265) |
所属类型(读书笔记)
[2009-11-05 11:07] 如何理解减法对标志位的影响
减法运算:
MOV AH ,0A3H
MOV AL ,0AH
SUB AH,AL
计算结果是 (AH)=99H(1001 1001 B)
如果按照无符号数来看待并进行计算的话,相当于进行163-10的运算结果应该是153(即99H)是正确的。如果按照有符号数来看待并进行计算的话,相当于进行(-93)-(10)的运算,结果应该是(-103)(即补码表示的99H)是正确的。
但是:
MOV AH,0AH
MOV AL,0BH
SUB AH,AL
计算结果是(AH)=FFH(1111 1111 B)
如果按照有符号数来看待并计算的话,相当于进行10-11的运算,结果应该是-...
MOV AH ,0A3H
MOV AL ,0AH
SUB AH,AL
计算结果是 (AH)=99H(1001 1001 B)
如果按照无符号数来看待并进行计算的话,相当于进行163-10的运算结果应该是153(即99H)是正确的。如果按照有符号数来看待并进行计算的话,相当于进行(-93)-(10)的运算,结果应该是(-103)(即补码表示的99H)是正确的。
但是:
MOV AH,0AH
MOV AL,0BH
SUB AH,AL
计算结果是(AH)=FFH(1111 1111 B)
如果按照有符号数来看待并计算的话,相当于进行10-11的运算,结果应该是-...
阅读全文 |
评论次数(1) |
浏览次数(439) |
所属类型(读书笔记)
[2009-11-04 20:48] 1.传送指令
传送指令 MOV
MOV DST,SRC
传送指令的例外:
①源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的。指令指针IP
既不能作为源,也不能作为目的。
②源操作数和目的操作数类型要一致。
③除了串操作指令外,源操作数和目的操作数不能同时是存储器操作数。...
MOV DST,SRC
传送指令的例外:
①源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的。指令指针IP
既不能作为源,也不能作为目的。
②源操作数和目的操作数类型要一致。
③除了串操作指令外,源操作数和目的操作数不能同时是存储器操作数。...
阅读全文 |
评论次数(0) |
浏览次数(264) |
所属类型(读书笔记)
[2009-11-03 20:04] 作为汇编最好的入门书籍
今天再看其它的汇编书籍,发现容易了很多。主要是有入门的基础了,看起来就像行云流水一样了。...
阅读全文 |
评论次数(0) |
浏览次数(326) |
所属类型(读书笔记)
[2009-10-31 19:26] 标志寄存器的英文单词
OF(OVERFLOW FLAG)溢出标志位:
1:OV(overflow)0:NV(non-overflow)
DF(Direction FLAG)方向标志位:
1:DN(down) 0:UP(up)
IF(Interrupt FLAG)中断标志位
TF(Trap FLAG)
SF(sign FLAG)符号标志位
1:NG(negative)0:PL(plus)
ZF(Zero FLAG)零标志位
1:ZR(zero)0:NZ(not zero)
AF(accessary carry flag)辅助进位标志位
PF(parity FLAG)奇偶标志位
1:PE(Par...
1:OV(overflow)0:NV(non-overflow)
DF(Direction FLAG)方向标志位:
1:DN(down) 0:UP(up)
IF(Interrupt FLAG)中断标志位
TF(Trap FLAG)
SF(sign FLAG)符号标志位
1:NG(negative)0:PL(plus)
ZF(Zero FLAG)零标志位
1:ZR(zero)0:NZ(not zero)
AF(accessary carry flag)辅助进位标志位
PF(parity FLAG)奇偶标志位
1:PE(Par...
阅读全文 |
评论次数(0) |
浏览次数(254) |
所属类型(读书笔记)
[2009-10-13 18:36] 关于栈的初步研究
在做第三章的实验的时候,书上说,要分析一下栈中的内容为什么会变化。我还没有研究出它为什么会变化,但是也得出了一些结论。
开机以后SS:SP指向一个系统自动分配的地址。但是这个分配原则现在还不清楚。如:SS=22A8,SP=FFEE。你可以在空白区域中先写几行代码试验一下。注意代码中不能包含对栈段寄存器的操作。先查看22A8:FFEE内存中的内容,发现什么也没有。但是如果将输入的指令用T命令执行,然后马上查看22A8:FFE0 FFEE的内容就会发现如下规律:
DS:[]: DD DD 00 00 IP IP CS CS XX XX SP
其中SP代表栈的偏移地址,即栈顶单元。XX ...
开机以后SS:SP指向一个系统自动分配的地址。但是这个分配原则现在还不清楚。如:SS=22A8,SP=FFEE。你可以在空白区域中先写几行代码试验一下。注意代码中不能包含对栈段寄存器的操作。先查看22A8:FFEE内存中的内容,发现什么也没有。但是如果将输入的指令用T命令执行,然后马上查看22A8:FFE0 FFEE的内容就会发现如下规律:
DS:[]: DD DD 00 00 IP IP CS CS XX XX SP
其中SP代表栈的偏移地址,即栈顶单元。XX ...
阅读全文 |
评论次数(0) |
浏览次数(253) |
所属类型(读书笔记)
[2009-10-11 14:03] 如何理解LOOP?
在汇编用LOOP实现循环的功能。
语法 LOOP 标号。
但是在学习的过程中有几个问题想不明白.
1.对应的机器码是什么呢?
查看了一下执行文件。发现LOOP语句的机器码不固定。E2FC,E2FA,E2F7...想推测一下。是不是E2表示是LOOP功能后面的和标号的IP地址有关系?
2.标号的IP记录在哪里了呢?
当执行LOOP语句的时候CPU先把CX减1,然后判断它是不是为0.如果不为0,就把IP的内容改成标号的地址偏移量。如果为0,则把IP的值加2,执行LOOP下面的语句。但是没有发现标号所在的内存单元的偏移地址保存在哪里。...
语法 LOOP 标号。
但是在学习的过程中有几个问题想不明白.
1.对应的机器码是什么呢?
查看了一下执行文件。发现LOOP语句的机器码不固定。E2FC,E2FA,E2F7...想推测一下。是不是E2表示是LOOP功能后面的和标号的IP地址有关系?
2.标号的IP记录在哪里了呢?
当执行LOOP语句的时候CPU先把CX减1,然后判断它是不是为0.如果不为0,就把IP的内容改成标号的地址偏移量。如果为0,则把IP的值加2,执行LOOP下面的语句。但是没有发现标号所在的内存单元的偏移地址保存在哪里。...
阅读全文 |
评论次数(2) |
浏览次数(513) |
所属类型(读书笔记)