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

我的博客

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

[2007-12-21 15:39] 可爱的指令----nop

那天网上有人问nop指令的作用是什么,我就想起来一条,就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。

后来,baidu了一下,发现有许多答案:

1)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟:);

2)i/o传输时,也会用一下nop,等待缓冲区清空,总线恢复;

3)清除由上一个算术逻辑指令设置的flag位;

4)破解:)对于原程序中验证部分使用nop来填充,使验证失效;

5)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞!
解释如下:在空...
阅读全文 |   作者:Wednesday | 评论次数(3) | 浏览次数(1298)

[2008-03-30 19:50] 是否可以在自己写的INT 0H中断例程结束处用IRET来返回调用程序

提出问题者:wesom
地址:http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1013&qkSg=2&qID=13334


问题:
===============================
书上的例子使用的是调用另外的中断mov ax,4c00h int 21h来退出,如果用iret来出栈为什么不能退出呢? 
溢出程序: 
code segment 
   begin : mov ax,data 
           mov ds,ax 
           mov ax,1000h...
阅读全文 |   作者:taotling | 评论次数(29) | 浏览次数(3533)

[2008-08-23 19:20] 实验10.3-数值显示

在这个程序中,我定义的SI和原书中的SI不同。因为我的程序中,字符串'12666'是逆序存放在以DS:0001为起始地址的内存单元中,DS:0000中的内容为0,作为结束符。除法运算结束后,SI指向'66621'后的单元,内容也为0,所以在循环读取DS:SI中的内容到显示缓冲区时,SI应先减一。

;;;*****************************************************************************
;;;子程序描述:
;;;名称:dToC
;;;功能:将word型数据转变为表示十进制数的字符串,字符串以0结尾
;;;参数:...
阅读全文 |   作者:fontomas | 评论次数(2) | 浏览次数(1279)

[2008-08-06 12:18] 堆和栈的区别

转自:http://www.cnblogs.com/devilfeng/archive/2007/10/18/929159.html


一直就搞不清出这个问题,今天上网想起来,随即搜了搜,找到了一些资料。不知源作者是谁。姑且“拿来主义”一下,呵呵。

一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)—   由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) —   一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两...
阅读全文 |   作者:fontomas | 评论次数(4) | 浏览次数(1782)

[2008-04-29 15:09] 函数指针数组

关于函数指针数组的定义 


关于函数指针数组的定义方法,有两种:一种是标准的方法;一种是蒙骗法。 

第一种,标准方法: 


分析:函数指针数组是一个其元素是函数指针的数组。那么也就是说,此数据结构是是一个数组,且其元素是一个指向函数入口地址的指针。 
根据分析:首先说明是一个数组:数组名[] 
其次,要说明其元素的数据类型指针:*数组名[]. 
再次,要明确这每一个数组元素是指向函数入口地址的指针:函数返回值类型 (*数组名[])().请注意,这里为什么要把“*数组名[]”用括号扩起来呢?因为圆括号和数组说明符的优先级是等同的,如果不用圆括号把指针数组说明表达式...
阅读全文 |   作者:xiaoqiang | 评论次数(2) | 浏览次数(2219)

[2008-08-20 13:07] 是幻想,但,也是梦想!

刚过了生日,爸爸说:“21岁是大生日,代表你是大人了。”(ps:其实我20,我们习惯一出生就说是1岁)是的,长大了啊,我似乎要准备自己赚钱?不再依赖父母?我什么时候才能做到?我不知道!

    大一结束了,我颓废了1.5个学期,到最后的0.5个学期才醒悟,才开始为自己的将来打算。我高中时被骗了,谁说大学轻松?谁说考到大学就解脱了?那只是考上大学之后放弃理想的人的说法!大学一点也不轻松,有很多事要想,要学,要做!有人想着怎样认识更多朋友,扩大自己的圈子;有人学着提高自己的能力,组织能力、策划能力、交际能力...很多很多;有人要做自己觉得有意义的事。大学很多事要做,是的,不轻松。我一想到自己...
阅读全文 |   作者:musicvs | 评论次数(59) | 浏览次数(5563)

[2008-08-27 15:59] 两个疑问,求解!

1.关于检测点11.2的疑问
执行第三条指令add AL, 90H后,AL=A0H,我算的结果是:CF=0,OF=0,SF=0,ZF=0,PF=1
我不明白的是,为什么答案里SF=1?
然后我有仔细的翻看了SF一节,对于数值运算时应该按有符号数还是无符号数有了这样的想法:
书中第204页提到:“CPU在执行add等指令时,就已经包含了两种含义,也将得到用一种信息来记录的两种结果”,因此,是不是在进行运算时, 8位寄存器的表示范围始终是[-128,127],而不是[0,255],所以才有即使AL=A0H < 255也有SF=1,但如果这样的话,那 A0H=160D>127,岂不是也会产生...
阅读全文 |   作者:fontomas | 评论次数(2) | 浏览次数(1344)

[2008-08-26 04:30] 检测点11.1

写出下面每条指令执行后,ZF、PF、SF等标志位的值。
sub al,al         ZF=1     PF=1     SF=0 
mov al,1          ZF=1     PF=1     SF=0 
push ax           ZF=1     PF=1     SF=0 
pop bx            ZF=1     PF=1     SF=0 
add al,bl         ZF=0     PF=0     SF=0 
add al,10         ZF=0     PF=1     SF=0 
mul al       ...
阅读全文 |   作者:fontomas | 评论次数(3) | 浏览次数(1334)

[2008-08-26 03:23] 程序学习——字符反向输出

;;;*********************************************************************
;;;程序功能:任意输入几个字符(最多能输入9个),按回车则倒着输出!
;;;编程步骤:
;;;        1: 建立缓冲区,为输入字符串(最多能输入9个)
;;;        2: 取缓冲区的首地址,以便后面进行"寄存器间接寻址方式"
;;;        3: 利用"寄存器间接寻址方式"取得实际输入字符个数,以便确认循环次数
;;;        4: 利用"寄存器间接寻址方式"输入字符串的最后一个字符
;;;        5: 利用LOOP指令和2号显示功能来进行倒着显示
;;;*****...
阅读全文 |   作者:fontomas | 评论次数(1) | 浏览次数(1731)

[2008-08-24 14:12] 补码的原理

大家都知道求补码的方法是原码取反+1?但为什么要这么做,原理是什么,估计没几个人认真思考过。找了几篇文章,还在迷惘中的朋友们可以过来瞧一瞧。

理解关键点:模

1.百度百科_补码:http://baike.baidu.com/view/377340.htm(代数解释)
2.补码的时钟原理:http://way79.spaces.live.com/blog/cns!a95f7b8848aa2732!467.entry
3.补码原理及随想:http://www.blogjava.net/geyinglong/archive/2007/11/01/157401.html?opt=adm...
阅读全文 |   作者:fontomas | 评论次数(2) | 浏览次数(1716)

[2007-10-20 19:09] 一个感染 com  的病毒

日久见人心,才没几天。。。偶手又痒了。。。。。在看完一个感染com文件的病毒激动万分的时候,偶决定要为这个“病毒”写点东西,也算对得起它吧,估计又该有某某大叫头疼了,但思路却是相同的,每个人,每件事,对么? 好了开始。。。。

        介绍下这个病毒的结构,这个病毒是感染com文件的(古老的一种文件格式,但是很简单),由于是实模式下的,所以我们就可以添删com而不用担心别的事情,程序有感染的代码,有破坏的代码,因为没有自动查找的代码程序暂时只能感染test.com这个co并删除del.txt这个文件,但有点不爽的是这个程序没有判断是否已经感染,结果就造成重复感染,有兴趣的可以加上这...
阅读全文 |   作者:mnzn2530 | 评论次数(6) | 浏览次数(2471)

[2008-06-20 20:16] 台湾一校长的演讲: 震动所有中国人<转>

台湾一校长的演讲: 震动所有中国人


我这里特别强调的是国家观念。1. 
我常常给我的学生讲一个故事:我们有一天出去旅行,忽然间暴风雨来了。我们没地方避风躲雨,孩子们向前跑,一看前面有个草棚,大家“哗”地冲了进去,一冲进去大雨就来了。大家好高兴,“哇,今天运气不错哟,刚刚下雨就看到这个草棚,可以不被雨淋了。”可是,由于草棚太破旧,受到大雨冲击后,即将倒塌,怎么办? 
“扶住它,不能让房子倒塌”。在这种状况下,我很有感慨,同学们,你们说是我们需要房子呢,还是房子需要我们呢?(掌声)我看是我们需要这座房子。这座房子就是我们的国家,再破再烂是我们的家,再穷再破,是我们的家,我们要爱她!(...
阅读全文 |   作者:ppt | 评论次数(25) | 浏览次数(2936)

[2007-10-12 15:34] cpu 保护模式(转)

第一:实模式下程序的运行回顾.
程序运行的实质是什么?其实很简单,就是指令的执行,显然CPU
是指令得以执行的硬件保障,那么CPU如何知道指令在什么地方呢?
对了,80x86系列是使用CS寄存器配合IP寄存器来通知CPU指令在内存
中的位置.
程序指令在执行过程中一般还需要有各种数据,80x86系列有DS、
ES、FS、GS、SS等用于指示不同用途的数据段在内存中的位置。
程序可能需要调用系统的服务子程序,80x86系列使用中断机制
来实现系统服务。
总的来说,这些就是实模式下一个程序运行所需的主要内容
(其它如跳转、返回、端口操作等相对来说比较次要。)

第二:保护模...
阅读全文 |   作者:dcgdcg | 评论次数(9) | 浏览次数(4393)

[2009-04-25 09:45] 第二章一道选择题

下列说法正确的是:
1、  8086CPU采用“段地址*16+偏移地址=物理地址”的寻址模式,所以内存是由一个一个的段组成,每一个段有一个段地址。 
2、  物理地址为ffff0H的内存单元的偏移地址可能为ffffH。 
3、  一个段的大小可以是8Byte。 
4、  在一段没有任何跳转指令的程序中,超出64K的部分将不会被执行。 

我晕哦,这道题折腾了半天!到底选什么啊?...
阅读全文 |   作者:linwangfeng | 评论次数(1) | 浏览次数(445)

[2009-07-26 16:04] 实验九,没用上jmp jcxz等命令。。。

assume cs:code
data segment
db 'welcome to masm!'
db 00000010b,00100100b,01110001b
data ends
code segment
start:mov ax,data
mov ds,ax
mov ax,800h
mov es,ax
mov ax,0
mov di,16
mov cx,12
s:add ax,160
loop s
add ax,64
mov bx,ax
mov cx,3
s1:mov si,0
mov dx,cx
mov cx,16
s0:mov al,[si...
阅读全文 |   作者:asongsky | 评论次数(6) | 浏览次数(533)

[2009-07-26 00:13] 实验七

assume cs:codesg,ds:data,es:table   
data segment   
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'   
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'   
    db '1993','1994','1995'   
    dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,19...
阅读全文 |   作者:asongsky | 评论次数(2) | 浏览次数(554)

[2009-07-30 02:03] 实验十 第一题,

assume cs:code 
data segment 
db 'Welcome to masm!',0 
data ends 
code segment 
start: mov dh,8 
mov dl,3 
mov cl,2 
mov ax,data 
mov ds,ax 
mov si,0 
call show_str 
mov ax,4c00h 
int 21h 
show_str:mov ax,0b800h 
mov es,ax 
mov al,160                  
mul dh
add al,dl 
add al,dl ...
阅读全文 |   作者:asongsky | 评论次数(1) | 浏览次数(493)

[2009-07-30 19:28] 实验十 第二题,

assume cs:code
code segment
start:mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
ret
code ends
end start...
阅读全文 |   作者:asongsky | 评论次数(1) | 浏览次数(534)

[2010-07-22 09:51] 关于PSP的一点知识

在dos下执行某个程序, 则它的各个段以及指针寄存器寻址的位置以及内存的组织如下图:
偏移                   段
-----------------------
|                     |
|                     |
|程序和所有的程序段   |
|                     |
|                     |
|                     |
|                     |
|---------------------|0000:00FFH CS和SS  ...
阅读全文 |   作者:masmaster | 评论次数(4) | 浏览次数(1523)

[2013-05-15 12:51] 关于栈的几点疑问,盼解答

问题1:
截止到目前,栈段都是我们自己定义的,关于栈顶,也只是提供一个ss:sp指向,cpu只是知道当前栈顶的地址,既不知道这个栈的起始位置和结束位置,也不知道这个栈的大小,换句话说,cpu是不知道我们假想的栈的,也就是任何一段内存都可以当做栈,这个栈既可以很大,又可以很小既然如此,因为CPU自身并不知道我们定义的栈起始位置和结束位置,那么又何来栈顶超界的说法呢?第一章我们知道,8086cpu的内存空间地址是00000到9FFFF,难道说栈顶超界是指栈顶不在00000和9FFFF之间吗?不在这个范围之内吗?
问题2:书上说,一个栈段最大为的长度最大为64KB,如果将10000H和1ffff...
阅读全文 |   作者:lxnokxie | 评论次数(7) | 浏览次数(569)
页码数(8):  1  2  3  4  5  6  7  8