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

我的博客

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

[2007-12-10 15:47] BIOS和DOS中断大全

准备个手册...
;-)

中断INT 21H :
1、字符功能调用类(Character-Oriented Function)
01H、07H和08H —从标准输入设备输入字符
02H —字符输出
03H —辅助设备的输入
04H —辅助设备的输出
05H —打印输出
06H —控制台输入/输出
09H —显示字符串
0AH — 键盘缓冲输入
0BH —检测输入状态
0CH —清输入缓冲区的输入功能

(1)、功能01H、07H和08H 
功能描述:从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重...
阅读全文 |   作者:mouse | 评论次数(4) | 浏览次数(2143)

[2007-12-12 08:46] 汇编语言超浓缩教程(转)

也是一个汇编的教程,虽然没有王爽老师写的汇编语言好,但是也算不错了,支持下。

----------------
原文:
“ 哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二...
阅读全文 |   作者:startasm | 评论次数(3) | 浏览次数(2105)

[2007-12-30 14:46] 计算N!

assume cs:code
code segment 
    start:
         mov ah,0
         mov al,3
         push ax
         call recursion
         pop ax
         mov ax,4c00h
         int 21h
    ;栈传递N值 
    ;子程序的局限:N!<= 0xFFFFH
    recursion:
         push bp
         push ax
         mov bp,sp
       ...
阅读全文 |   作者:playboy | 评论次数(1) | 浏览次数(2518)

[2007-12-12 09:28] 透过汇编另眼看世界之类成员函数指针

透过汇编另眼看世界之类成员函数指针[转]

参考文献:
1。《C++ Common Knowledge: Essential Intermediate Programming》By Stephen C. Dewhurst

“成员函数指针并不是指针”该如何理解呢?通过汇编代码我们可以更深入的理解这句话的含义。

前言:在CSDN论坛经常会看到一些关于类成员函数指针的问题,起初我并不在意,以为成员函数指针和普通的函数指针是一样的,没有什么太多需要讨论的。当我找来相关书籍查阅了一番以后,突然意识到我以前对成员函数指针的理解太过于幼稚和肤浅了,它即不像我以前认为的那样简单,它也不像我以...
阅读全文 |   作者:huibian | 评论次数(2) | 浏览次数(1604)

[2008-04-16 14:39] 实验16   编写包含多个功能子程序的中断例程

分析:
采用两种方法:
方法一:查表。
充分体会数据标号作用,为此,调整了安装程序的结构,把需要安装的数据放在前面,感觉这样更容易理解些。
方法二:比较。
用通过比较功能号进行转移的方法,可能很多人不屑于这个方法,但对于这个小实验而言程序结构也很清晰。
(当然如果用这个方法,就失去了在本章做这个实验的意义,放在前面几章也可以做出来的。)

---------------------------------------方法一:查表-----------------------------------
assume cs:code 
code segment
setscree...
阅读全文 |   作者:hihi | 评论次数(1) | 浏览次数(1480)

[2008-03-04 08:53] assume的作用探讨【转】

ASSUME是把你自己定义的DATA段和CPU中的CS段连起来的意思,这样,CS就指向了你所定义的DATA段了。见《汇编语言》(王爽)P73 
p278 16.2小节中的内容。 

http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=free&kind=1220&qkSg=2&qID=7172&readSg=1 
关于assume的作用,许多人都简单的解释说,这是告诉编译器哪一个段和哪一个段寄存器相关联。举个简单例子来说: 
assume cs:code, ds:data 
这是告诉编译器cs和code关联,ds和data关联,...
阅读全文 |   作者:abcabc | 评论次数(11) | 浏览次数(8628)

[2008-03-10 02:29] 实验16  编写包含多个功能子程序的中断例程

如图。
===============CODE=====安装程序====================


assume cs:code
code segment
  table  dw 16+offset ClearScreen-offset CallSubProgram,0020H
         dw 16+offset SetForegroundColor-offset CallSubProgram,0020H
         dw 16+offset SetBackgroundColor-offset CallSubProgram,0020H
         dw 16+offset Scroll-...
阅读全文 |   作者:taotling | 评论次数(6) | 浏览次数(1229)

[2008-05-07 18:13] 自己用汇编语言写的一个病毒(源码)(转载)

这个病毒虽然比较简单。但是麻雀虽小,五脏俱全。隐藏,感染,加密等模块应有尽有(只是不会破坏),是一个比较标准的DOS病毒,可以感染.EXE(不包括PE)和.COM的可执行文件。
如果您希望学习汇编语言,用这个程序作为入门指导倒是比较合适的。
染毒文件会被打上“CR”的标记,我们姑且称它为CR病毒吧。
baseoff equ 107h

code    segment
    assume cs:code,ds:code,es:code,ss:code
    org 100h
main:    
    mov ax,offset begin
    jmp ax
   ...
阅读全文 |   作者:black | 评论次数(5) | 浏览次数(1039)

[2008-04-14 10:19] INT9子程序分析

;INT 9子程序 
;===================================== 
the9:  
            push ax  
            push es  
            mov ax,0b800h  
            mov es,ax  
            pushf                    ;标志寄存器压栈  
              
              pushf  
            pop ax  
            and ah,11111100b...
阅读全文 |   作者:jhszcn | 评论次数(3) | 浏览次数(1435)

[2008-05-06 23:45] 第十五章学习笔记

1.CPU通过端口和外部设备进行联系。外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入端口中,再由相关的芯片送到外设。CPU对外设的控制命令也是先送到相关芯片的端口中然后再由相关的芯片根据命令对外设实施控制。

2.在PC系统中,外中断源一共的两类:
(1)可屏蔽中断:可屏蔽中断是CPU可以不响应的外中断。CPU是否响应可屏蔽中断,要看标志寄存器的IF位的设置。当CPU检测到可屏蔽中断信息时,如果IF=1,则CPU要执行完当前指令后响应中断,引发中断过程;如果IF=0,则不响应可屏蔽中断。
可屏蔽中断引发的中断过程:
...
阅读全文 |   作者:sirius | 评论次数(1) | 浏览次数(854)

[2008-05-06 18:22] 这儿写文章不如论坛发帖子舒服

如题
我直接把帖子连接复制过来了
7FFFH,8000H,9FFFH 这类地址是怎么来的? 
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1002&qkSg=3&qID=15155&readSg=1
8088CPU,数据总线为8,传输89D8,怎么会传输8次呢 
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1002&qkSg=3&qID=15156&readSg=1
问个关于 debug下 a命令的问题 
http:/...
阅读全文 |   作者:dgfsdgs | 评论次数(0) | 浏览次数(543)

[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) | 浏览次数(3652)

[2008-05-06 09:06] 试验12

思路:
(1)将中断处理程序复制到正确的位置(复制到从0000:0200开始处)
(2)设置中断向量表项中的值,使它指向中断处理程序的地址
(3)编写中断处理程序显示字符串"divide error"

源程序:

assume        cs:code
code        segment
start:        mov ax,cs
        mov ds,ax
        mov si,offset d0        ;ds:si源程序地址
        mov ax,0
        mov es,ax
        mov di,200H        ;es:di中断处理程序的地址
        mov cx,offset d0end-offset d0;中断程序的长度
        ...
阅读全文 |   作者:hncscwc | 评论次数(4) | 浏览次数(1042)

[2008-04-14 00:23] 实验9

编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'。

根据提供的实验材料知识得到如下信息:
1.80*25彩色字符模式显示缓冲区第0页内存地址空间的段地址为:B800H
2.编程要求的对应的字符串属性字节如下:
绿色          00000010B=02H
绿底红字        00100100B=24H
白底蓝字        01110001B=71H
3.所要求显示的字符串为16个字符,则以下显示方式在80*25模式中是屏幕上下左右居中:
第12行第32列开始显示绿色字符串
第13行第32列开始显示绿底红色字符串
第14行第32列开始显示白底蓝色字符串
...
阅读全文 |   作者:sirius | 评论次数(3) | 浏览次数(1182)

[2008-04-13 07:56] 对8086内存的思考

8086的总内存为FFFFF个单元
但用DEBUG可以看到 FFFF:00FF-FFFF:0179 而且数据不是连续为零或1,此段内存是有意义的。那么,多出的EFH个单元写在哪了呢?会不会把CS*16+IP的结果中多出的最高位舍掉了呢?也就是DEBUG中“D FFFF:00FF”和“D 0000:00EF"一样呢?
检验后发现两个段不一样。
那到底是为什么呢?思考中…………

附图片...
阅读全文 |   作者:pgd5776 | 评论次数(3) | 浏览次数(544)

[2008-02-19 01:01] 相同的汇编指令VS不同的机器代码 分析

01c0 add ax,ax
03c0 add ax,ax
简单的来说,就是 01 03都是add
01d8  add ax,bx
03c3  add ax,bx
简单的来说
就是 01 03都是add
    d8 c3 是bx+ax 结果放入 ax
          和ax+bx 结果放入 ax
具体分析在图里

谁来写篇仔细的教程啊,偶 ,困了,晕了,睡了。

看懂的跟些自己造出来的类似情况。...
阅读全文 |   作者:feiwei | 评论次数(6) | 浏览次数(2175)

[2008-04-12 02:26] 实验10(2)解决除法溢出的问题

本实验主要弄清楚根据提示的公式商的高4位的值,低4位的值是怎样得来的
公式X/N=int(H/N)*65535+[rem(H/N)*65535+L]/N

int(H/N)*65535得出的值就是(X/N)的商的高4位,
也就是说(H/N)的到的商将最终存储在dx中,(我在思考的时候认定此次除法的除数是16位的,其实可以是8位的,8位的可能会减少寄存器的操作,有时间再写写)

而[rem(H/N)*65535+L]/N求出的商即为(X/N)的商的低4位,所得出的余数就是(X/N)的余数
即(H/N)所得到的余数放在dx中,将L放在ax中,再次进行除数为16位的除法

我以书中...
阅读全文 |   作者:hncscwc | 评论次数(2) | 浏览次数(477)

[2008-03-30 10:51] 实验2-----第(2)题

先把跟踪过程贴出来:
--------------------------------------------------------------
以下是把指令输入到0b39:0100(保持与书上一致),第一次跟踪情况如下:
-------------------------------------------------------------
-a 0b39:0100
0B39:0100 mov ax,2000
0B39:0103 mov ss,ax
0B39:0105 mov sp,10
0B39:0108 mov ax,3123
0B39:010B push ax
...
阅读全文 |   作者:hihi | 评论次数(7) | 浏览次数(932)

[2008-04-10 16:07] 实验9 根据材料编程(两种方法)

方法一:简单的用三个循环处理字符串welcome,to,masm!其中三个字符串的颜色事先定义在data中 绿色:00000010=2,绿底红色:00100100=36,白底蓝色:00000001=1,将字符从第13行第33列开始显示,那么物理地址为B8000H+0780H(12*80*2)+40H(32*2)

assume cs:code,ds:data
data segment
        db 'welcome to masm!'
        db 2,36,1
data ends
code segment
start:        mov ax,0b878h
        mov es,ax        ;...
阅读全文 |   作者:hncscwc | 评论次数(3) | 浏览次数(823)

[2008-04-09 13:13] 实验7

我的思路:
(1)要复制年份到table中,年份是用四个字节表示的,一共有21个年份,需要用到双层循环,外层循环控制复制的年份(21次),内层循环控制每个年份的具体复制(4次)
(2)data段中的收入用dd来定义的,即也是四个字节,故想到在复制年份的时候,一起将收入的数据复制到table中,考虑到用的寄存器比较多,因而用栈暂时保存外层循环cx的次数
(3)人均收入需要用除法,将收入的低16位保存在ax中,高16位保存在dx中,用[di+idata]的方法指向data中雇员人数的地址,进行除法后商为人均收入在ax中,然后复制到table中的正确位置,然后将雇员人数也复制到table中,然...
阅读全文 |   作者:hncscwc | 评论次数(2) | 浏览次数(706)
页码数(2):  1  2