汇编网首页登录博客注册
scuzg的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
友情链接

[2010-07-02 09:38] 怎样“区分”带符号数和无符号数?

初学的朋友往往会问怎样“区分”无符号数和带符号数,其实两者在形式上是没有区别的,区别就在你的心里:如果你将某二进制数的最高位视为符号位,就是带符号数;如果将其看作是一个有效数位而不是符号位,则为无符号数。
    比如0fdh,如果将最高位视为有效数位,则0fdh就是无符号数,即253;如果最高位视为符号位,它就是一个带符号数,并且是个负数;而在计算机内部,负数都用补码表示,所以将0fdh看作负数时,它就是某个负数的补码: 
    0fdh=11111101b 
将其按数值位“各位取反、末位加1”的法则转换成原码则是: 
    10000011b 
这就是0fdh的原码-3。  ...
阅读全文 | 评论次数(7) | 浏览次数(1823) | 所属类型(汇编语言)

[2009-12-29 00:04] 通过反汇编代码解读指针和引用的内在机理

试图用中文、英文等自然语言将 C++ 的指针和引用的异同描述得简练、通透是一件困难的事情,而阅读包含指针和引用的反汇编代码是一个好办法:这绝对是一种无二义性和尽可能简练的陈述。
    比如下述代码
void main(void)
{        
    int x1=0,*ptrx1=&x1;
    int x2=0,&refx2=x2;

    (*ptrx1)++;    //关注对变量的操作
    refx2++;

    printf("x1=%d,x2=%d\n",x1,x2);
}
执行后,通过指针及引用对变量的间接操作使 x1 和 x2 都增加了 1 ,不...
阅读全文 | 评论次数(0) | 浏览次数(990) | 所属类型(汇编语言)

[2009-10-26 08:27] 推荐博文 我们的手指和二进制数(位串、位序列)

存储于计算机内的各种二进制数,严格意义上应该称作二进制位串(或位序列),这些二进制位串可能是数,也可能是编码(比如ASC码、汉字内码等)或机器指令。
    用简单的二进制位串表现内涵迥异的内容是我们不熟悉和容易迷惑的,但想想我们的手指就会感到释然:手指不仅可以表示数,也可以表示OK、WC、“你真棒”、“石头、剪子、布”、证券交易所、特警突击队以及划拳用的手势等。
    面对一个孤立的二进制位串,我们是无法确定它究竟是数、是码还是指令的。比如一个目标程序,其内容显然是机器代码,但当对该程序进行传送或加密处理时,这些代码就成了被其他程序处理的数据。这和我们的手势又很类似:竖起食指和中指,可...
阅读全文 | 评论次数(4) | 浏览次数(1762) | 所属类型(汇编语言)

[2009-10-25 12:27] 海归博士死于大学的“大师梦”

http://blog.qq.com/qzone/622007992/1256248692.htm

    荒唐、滑稽和令人不齿的“学术”界!...
阅读全文 | 评论次数(2) | 浏览次数(860) | 所属类型(探索与思考)

[2009-09-27 20:53] 存储器寻址小议(三):存储器寻址方式和常量、变量及“准指针”

CPU 获得操作数的方式叫作寻址方式。
    和计算机三个核心部件(CPU、存储器和I/O接口)相对应,寻址方式自然地分成了(CPU内部的)寄存器寻址、存储器寻址和I/O接口寻址。
    由于 CPU 的寄存器数量极少,所以寻址方式非常简单;而实现计算机内核和外设间数据交换的 I/O 接口的寻址也没有复杂的必要,所以这两类寻址方式是很容易学习和掌握的;为管理大容量内存,便于组织串、数组等结构复杂的数据处理,存储器必须具有更灵活、也就相对复杂的寻址方式。
    通过上一单元的讨论我们知道,8086/8088 CPU 的物理地址是由逻辑地址间接给出的。逻辑地址的段基址部分直接用通用寄存...
阅读全文 | 评论次数(1) | 浏览次数(1153) | 所属类型(汇编语言)

[2009-09-23 21:49] 推荐博文 存储器寻址小议(二):8086/8088的物理地址、段机制和逻辑地址

点击查看原图
为寻址(或管理、使用)1M 字节的存储空间,8086/8088 CPU 设计有 20 条地址线。这 20 条地址线从全 0 到全 1 的 1M 种状态通过驱动地址译码逻辑,即可寻址 1M 字节的内存。
    这从全 0 到全 1 的每一个二进制数,很自然地可以作为内存字节单元的编号,即地址;由于使用这种地址能直接控制地址译码器在物理上唯一地选通某个字节单元,故被称做“物理地址”。
    程序是不能直接给出 20 位地址信息的,这是因为 8086/8088 CPU 可编程的 14 个寄存器都是 16 位的,更没有通过编程直接输出20 位地址信息的其他途径。20 位地址输出是通过来自段寄存...
阅读全文 | 评论次数(8) | 浏览次数(3442) | 所属类型(汇编语言)

[2009-09-23 15:43] 存储器寻址小议(一):存储单元定位和地址译码

点击查看原图
在上图“地址译码逻辑”右侧,有和内存单元字节数相等的“字节单元选择线”和每一字节单元连接,CPU 访问内存某个字节时,只有一个字节单元受“字节单元选择线”的控制处于和数据线连接的状态,这就是内存单元的定位(如果是字访问方式,将会是两个相邻的字节单元和数据线相连)。
    直接从 CPU 引出和内存字节数相等的“地址选择线”来访问内存是不可能的,通常采用“地址译码器”来实现用少量地址线对大量字节单元的定位——即寻址。我们假设上图 CPU 用 8 根地址线连接地址译码逻辑,那么 8 根地址线就可以组合出 0~255 一共 256 种状态,这些二进制数的 0 和 1 在计算机里就是开关电路的状态...
阅读全文 | 评论次数(4) | 浏览次数(1624) | 所属类型(汇编语言)

[2009-08-10 22:18] 汇编语言源程序框架结构和格式规范

作为符号化机器语言及受段结构的影响,汇编语言源程序的结构和可读性都无法和高级语言相比。不过把汇编语言源程序共有的元素剥离出来,并稍加整理和熟悉,会发现情况会比先前清晰很多。
    汇编语言源程序大致包含下列 6 个“框架”元素:

;①容量足够且固定的“通用”堆栈段:
stck    segment stack 'stack'
        ;80H的栈深度足以应付一般应用程序对堆栈的需求 
        dw         80h dup(0)         
stck    ends 

;②空数据段
data    segment 

data    ends 
...
阅读全文 | 评论次数(7) | 浏览次数(2033) | 所属类型(汇编语言)

[2009-08-10 12:41] 类似DOS功能调用09H的字符串显示子程序

点击查看原图
DOS功能调用09H是实现字符串显示的软中断。该功能调用除不能指定显示位置及显示属性(前景色、背景色及是否闪烁)外,实现机理对初学者来说也是个“黑箱”。
    本文所述的字符串显示子程序,能“在指定位置、以指定属性显示指定的字符串”。由于这个子程序不依赖任何系统功能调用,所以能让我们看清楚字符串显示的内在机理。
    大家都知道计算机的显卡,它是在计算机的统一调度下完成显示的重要部件。显卡包含显示芯片和显示缓存,显示芯片是专司显示的协处理器,显示缓存是主机CPU和显示芯片都可以对其进行访问的“双口存储器”。字符显示的机理其实很简单:CPU 将要显示字符的ASC码及显示属性送入和指定显示...
阅读全文 | 评论次数(3) | 浏览次数(2300) | 所属类型(汇编语言)

[2009-07-30 14:56] 汇编语言的常量、变量及其与寻址方式的关系

我感觉仅仅停留在文字上阐述和理解汇编语言的常量和变量是一件麻烦事,而通过分析常量、变量定义和引用语句的反汇编代码,会发现问题其实非常简单。
    假设常量、变量的定义及引用语句如下:
;数据段常量和变量定义语句
fctr        equ        1218h
x        db        1
y        db        2
;代码段常量和变量引用语句
        mov        ax,fctr
        mov        bl,x
        add        bl,y
对应的反汇编代码如是:
;数据段目标代码
1475:0000  01 02 
;代码段目标代码
1476:0005 B81812        MOV     AX,1218
1476:0008 8A1E...
阅读全文 | 评论次数(5) | 浏览次数(1105) | 所属类型(汇编语言)
『 查看更多文章 』