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

我的博客

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

[2008-01-02 18:25] 【转】汇编揭秘C中的参数传递

汇编揭秘C中的参数传递

文章作者:cook702
很多学习汇编的朋友想必对C也比较了解,因为在当前大学的课程体系里,它很有可能就是你接触到的第一门编程语言。由于对计算机的理解不够,学习时必定会遇到各种问题。有些问题是你通过思考就可以解决的,而更多的问题则是你无从思考,就好像它天生就是这样,你只要记住就OK了。然而这样的学习方式是机械的,更是没有创造力的。只有真正理解了C语言,你才有能力去驾驭它,否则它和你之间永远会隔着一层窗户纸,虽然很薄,但是你永远也捅不透。这是为什么呢?其实道理很简单,就好比在一个公司有现成的代码库可以调用,有的程序员遇到问题时,他唯一可作的就是调用代码库中的功能模...
阅读全文 |   作者:mouse | 评论次数(2) | 浏览次数(812)

[2008-10-07 12:07] 综合研究 研究试验5 函数如何接收不定数量的参数

这个试验里,王老师要我们研究3个问题.

第一个:研究下面的程序

void showchar(char a,int b);
main()
{
   showchar('a',2);
}

void showchar(char a,int b)
{
   *(char far *)(0xb8000000+160*10+80)=a;
   *(char far *)(0xb8000000+160*10+81)=b;
}

问我们,main函数是如何给showchar传递参数的?showchar是如何接受参数.
从程序的汇编代码中可以看出,main函数是将要传递的...
阅读全文 |   作者:musicvs | 评论次数(12) | 浏览次数(3782)

[2009-02-06 19:17] 第二课 可变参数函数原理和printf的实现

#include <stdio.h>
#include <stdarg.h>

void myPrintf(char *former, ...)
{

        char *p;
        char cVaile;
        int intVaile;
        char * cpVaile;
        va_list vp;

        va_start(vp, former);
        
        for(p = former; *p; p++)
        {
                if(*p...
阅读全文 |   作者:answerooo | 评论次数(0) | 浏览次数(1006)

[2008-03-13 16:10] 实验17  编写包含多个功能子程序的中断例程(3)代码:

如图。

========CODE1:INT 7CH中断例程与安装=================

assume cs:codesg

codesg segment
    table dw 16+offset INT7C_DO-offset INT7CBEGIN,0020H
start:
        mov ax,cs
        mov ds,ax

        mov ax,0
        mov es,ax

        mov si,offset table
        mov di,0200H
        mov cx,4
        cld
        rep movsw

        mov si,offset INT7CBEGI...
阅读全文 |   作者:taotling | 评论次数(4) | 浏览次数(1150)

[2008-07-21 14:30] 实验9总结

第九章讲的是转移指令,但是实验9似乎不需要使用,只是还是得用循环。这章讲的转移指令主要在检测题中要用,以及后面的学习可能要用到。
    实验九的程序是我写的第一个有输出的程序。它给出了材料,让我运行程序后在屏幕中间显示字符串。材料中写出了保存位置和属性等资料。
    首先我要确定要写的位置。因为题目要求的是“中间”,所以在80*25显示器上,我选择了12-14行,33-48列,而12行33列的地址为b800:0720,于是我直接用ES储存段地址0b800h,SI储存偏移地址0720h(当然了,这只是开头的那个地址)。我用BX存字符串中的字符的地址,通过SI写入显存。
    程序要求...
阅读全文 |   作者:mytbk | 评论次数(1) | 浏览次数(713)

[2008-05-20 20:00] 检测点10.1-5

10.1
The answer is (mov ax,1000h ; mov ax,0).
程序中采用的retf,在此之前用了两次push指令,很明显用到了cs和ip的值,根据retf指令的操作知道先pop ip,再pop cs,所以在入栈时就先cs,再ip。

10.2
ax=6。
第一次做错了,认为ax=3,后来觉得有点太顺理成章,所以又看了一遍,发现执行call指令时,压入堆栈的值是call的下一条指令的偏移地址,试想ax=3,那么pop ax又返回到call指令了,这样就变成了死循环。

10.3
ax=1010h
经过call指令后,进入堆栈的cs=1000,ip...
阅读全文 |   作者:mark0289 | 评论次数(1) | 浏览次数(621)

[2007-10-24 17:09] 第10章检测点10.5

检测点10.5(1)
assume cs:code
stack segmeng
  dw 8 dup(0)
stack ends
code segment
  start:mov ax,stack
        mov ss,ax
        mov sp,16
        mov ds,ax
        mov ax,0  ;此时ax=0
        call word prt ds:[0eh] ;此时,发生push ip、jmp动作,而此时ip值指向下一个指令:inc ax,而ds段此时和stack段重合,故,ds:[0eh]此时内容为刚刚压栈的IP...
阅读全文 |   作者:mqmelon | 评论次数(1) | 浏览次数(1441)
页码数(1):  1