- 博客(48)
- 资源 (19)
- 收藏
- 关注
转载 计算指令长度(汇编)
指令长度与寻址方式有关系,规律或原则如下:一、没有操作数的指令,指令长度为1字节。如es:ds:cbwxlat等。二、操作数只涉及寄存器的指令,指令长度为2字节。如mov al,[si]mov ax,[bx+si]mov ds,ax等。三、操作数涉及内存地址的指令,指令长度为3字节。如mov al,[bx+1]mov ax,[bx
2012-05-27 15:36:26 1806
原创 Debug中标志寄存器的查看
IP寄存器之后的顺序依次为:溢出标志OF(Over flow flag) OV(1) NV(0)方向标志DF(Direction flag) DN(1) UP(0)中断标志IF(Interrupt flag) EI(1) DI(0)符号标志SF(Sign flag) NG(1) PL(0)零标
2012-05-25 22:16:28 2326
转载 学习汇编的重要意义!!
几日前,在一位仁兄的blog里看到如下一番话:其实我发现中国的教育还是有很大问题的,你们得让你们的学生认识到这门课的作用啊,有些师兄说到出去工作了才发现汇编的作用。 我觉得值得庆幸的是这位仁兄在在校期间的学习中及时地意识到了汇编的重要性,并做出了正确的选择。然而这位仁兄提到的“老师没有让学生认识到汇编的重要性”和“有些师兄工作了才发现汇编的重要性”这些在计算机专业教育中存在的客观事实,再次
2012-05-25 16:43:56 1170
原创 Windows汇编带颜色显示Hello World
;将codesm段与cs寄存器关联, 将data段与ds寄存器关联assume cs:codesg, ds:data;data段定义的开始data segment ;定义一个word类型的变量hello,注意,必须要以'$'结束 ;这是由DOS系统调用决定的。 ;在使用9号功能调用时,应当注意以下问题。
2012-05-25 16:39:42 1035
原创 汇编语言的Hello World
;将codesm段与cs寄存器关联, 将data段与ds寄存器关联assume cs:codesg, ds:data;data段定义的开始data segment ;定义一个word类型的变量hello,注意,必须要以'$'结束 ;这是由DOS系统调用决定的。 ;在使用9号功能调用时,应当注意以下问题。
2012-05-25 16:14:41 1603
原创 汇编常用的DOS功能调用
汇编常用的DOS功能调用:常用的DOS功能调用:1.键盘输入并显示(1号功能调用)格式: INT 21H功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是Ctrl+Break组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中2.键盘输入但不显示格式: MOV AH, 08H
2012-05-25 16:03:19 13565
原创 整数大数减法
#include #include #include char * BigNumberSubtration(const char *a, const char *b);int main(void){ int isSwap = 0; char *a = "998879879465498765794657984987465413215679879465498461324
2012-05-19 16:51:44 709
原创 整数大数加法
#include #include #include char * BigNumberAdd(const char *a, const char *b);int main(void){ const char * a = "9879797978979798797"; const char * b = "97979797987979797979797979797987"; char
2012-05-19 10:36:00 722
原创 大数相乘——自己仿写版
#include #include #include char * BigNumberMulti(const char * a, const char *b);int main(void){ const char * a = "999999999999999999999999999999999999999999999999999999999999999999999999999999
2012-05-18 22:22:11 1017
转载 大数相乘
#include #include using namespace std; void multiply(const char *a,const char *b); int main() { //cout<<"hicjiajia"<<endl; string num1,num2; // 初始状态用string来存储大数
2012-05-18 17:33:38 559
原创 求两个数相乘结果的位数
printf("位数为:%d\n", (int)ceil( ((log(a)+log(b)) / (log(10)) )));
2012-05-18 16:35:38 1862
原创 静态NAT配置
指定NAT内部网络接口 Router (config)# interface ethernet 0 Router (config-if)# ip address 192.168.1.254 255.255.255.0 Router (config-if)#ip nat inside 指定NAT外部网络接口 Router (config)# interface ethernet 1 R
2012-05-18 09:54:01 1629
原创 查看CPU的大小端模式
大小端:CPU对内存单元数据的排列顺序的方式. 采用小端(Little-endian)模式的CPU对操作数的存放方式是从低字节到高字节(从右到左即从低到高);这是X86平台采用的模式; 采用大端(Big-endian)模式对操作数的存放方式是从高字节到低字节;在网络上传送的数据采用的方式;例如:16bits宽的数:0x1234在Little-endian模式的CPU中内
2012-05-17 20:12:25 2642
原创 Debian下用C连接MySQL
1.首先安装mysql-server , mysql-client:sudo apt-get install libmysqlclient16 mysql-server mysql-client libmysqlclient-dev2.示例代码:/**********************************************
2012-05-17 19:52:21 1319
原创 Windows下C语言连接MySQL
1.把安装好的MySQL目录里的libmySQL.dll复制到C:\Windows\system32\下(我的是win7,还要添加到:C:\Windows\SysWOW64目录中);2.把MySQL的头文件添加到环境中:3.把libmysql.lib添加到VS 2010的项目中。4.示例代码:/************************************
2012-05-17 13:59:26 7302 5
原创 C语言中的可变参数
1.包含头文件 :,它声明了一种类型,并定义了(C89)几个宏:va_start, va_arg和va_end。C99中还增加了一个类似函数的宏va_copy。2.要想获取可变参数。必须声明va_list类型的变量来接收可变参数。 va_list ap; 然后将这个“指针”指针到开头。即第一个可变参数:va_start(ap, n);这里的n为可变参数列表中的第一个参数的名
2012-05-14 15:00:24 906
原创 <setjmp.h>非局部跳转(来自C语言程序设计--现代方法第二版)
int setjmp(jmp_buf env);void longjmp(jmp_buf env, int val); 可以使得一个函数直接跳转到另一个函数,而不需要返回。 setjmp宏“标记”程序中的一个位置;随后可以使用longjmp跳转到该位置。 注意:setjmp会在第一次调用时返回0;随后,longjmp将控制权重新转给最初的setjmp宏调用,而setjmp
2012-05-14 10:52:04 2188
原创 C标准中qsort()函数
原型:void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 其中,base必须指向数组中的第一个元素。(如果只是对数组中的一段区域进行排序,那么要使base指向这段区域的第一个元素。)在一般情况下,base就是数组的名字。nmemb是要排序元素的
2012-05-13 10:51:43 666
原创 一个复杂一点的单向链表
/*********************************************************************************** * * 作者:杨志永 ** 日期:2012-05-13
2012-05-12 17:52:41 812
原创 内存分配函数
1.为了动态地分配内存空间,可调用三种内存分配函数中的一种.这些函数都是声明在头文件中: 1) malloc函数--分配内存块,但是不对内存块进行初始化 2) calloc函数--分配内存块,并且对内存块进行初始化 3) realloc函数--调整先前分配的内存大小. 这三种函数中,malloc函数是最常用的一种.因为malloc函数不需要对分配的内
2012-05-12 09:30:05 797
原创 Linux信号中断处理
1.kill产生一个信号: extern int kill (__pid_t __pid, int __sig); pid>0:将信号发送给进程的pid为pid的进程; pid=0:将信号发送给和当前进程在同一个进程组的所有进程; pid=-1:将信号发送给系统内的所有进程; pid 成功返回0;失败返回值-1.2.raise自举一个信号: e
2012-05-12 08:18:36 789
原创 编译软件源代码提示-lcrypto 无法链接
1.cd /usr/lib2. sudo ln -sf libcrypto.so.0.9.6 libcrypto.so.0
2012-05-12 08:18:07 985
原创 Linux和Windows下刷新缓冲区
1. 使用 fflush(stdin); 或 rewind(stdin); 均可起到清空键盘缓冲区的作用,这两个函数均包含在stdio.h这个头文件中。但它们只适用于Windows系统。2.最具移植性的做法,使用以下函数: void setbuf(FILE *restrict stream, char *restrict buf); setbuf(stdin, NULL);
2012-05-12 08:17:30 957
原创 Linux下线程操作
1.创建线程:pthread_t 实质上是unsigned long int 类型。 extern int pthread_create(pthread_t *__restrict __newthread, __const pthread_attr_t *__restrict __attr, __void *(*__start_rout
2012-05-12 08:16:46 603
原创 Linux下的进程间通信PIPE
1.创建无名管道: extern int pipe (int __piepedes[2]) __THROW _wur; pipedes[0]:用来完成读操作 pipedes[1]:用来完成写操作 失败则返回回-1。2.读无名管道:ssize_t 即为unsigned int 类型。 extern ssize_t read (int __fd, void *
2012-05-12 08:16:15 841
原创 Linux下进程管理与控制
1.创建进程: extern __pid_t fork(void); 成功则在父进程中返回子进程的PID;在子进程中则返回0,以区别父子进程。 失败则在父进程中返回-1; 说明:子进程从创建后和父进程「同时」执行;竞争系统资源,子进程的执行位置为fork的返回位置。 extern __pid_t vfork(void); 成功则在父进程中返回子进程的PI
2012-05-12 08:15:40 772
原创 Linux下获取进程信息
1.获取当前进程号:(pid_t 实质是int类型) extern __pid_t getpid(void); 成功则返回当前进程号;失败则返回-1;2.获取父进程号: extern __pid_t getppid(void); 成功则返回当前进程的父进程号;失败则返回-1;3.获取进程组号: extern __pid_t getpgid(__
2012-05-12 08:15:05 1301
原创 Linux C获取下载和上传的网速V3
/** 作者:杨志永* 日期:2012-04-17 10:10 * Email:ljy520zhiyong@163.com* QQ:929168233* * 文件名: watch_network_speed.c* 编译环境:Debian 6.0.4 Testing, GCC 4.6.3 X86_64* * 功能:获取Linux系统下的下载和上传的网速**/#include
2012-05-12 08:11:32 1599
原创 Linux C下获取下载和上传的网速V2
/** 作者:杨志永* 日期:2012-04-17 10:10 * Email:ljy520zhiyong@163.com* QQ:929168233* * 文件名: watch_network_speed.c* 编译环境:Debian 6.0.4 Testing, GCC 4.6.3 X86_64* * 功能:获取Linux系统下的下载和上传的网速**/#include
2012-05-11 22:52:56 1831 2
原创 用Linux C语言获取当前网速
/******************************************************* 作者:杨志永* 日期:2012-4-16 4:35PM* E-mail:ljy520zhiyong@163.com* QQ:929168233** filename: watch_net_speed.c* 编译环境:Debian 6.0.4 Testing + GCC
2012-05-11 22:52:05 6023
原创 POSIX标准下文件IO管理
1、打开文件: extern int open (__const char * __file, int __oflag, ...); 成功则返回该文件的描述符;否则返回-1. flags: O_RDONLY:以只读方式打开文件 O_WRONLY:以写方式打开文件 O_RDWR:以可读可写方式打开文件 O_CREATE:若打开的文件不存在,则自动
2012-05-11 22:51:11 1215
原创 文件描述符
对于内核: Linux在内核源文件/usr/src/kernel/`uname -r`/include/linux/fs.h中定义了struct file结构是用来保存打开文件基本信息的。 对于用户空间来说: 任何打开的文件都将被分配一个唯一非负整数,用于标识该打开文件,该值即为文件描述符,它是一个大于等于0的整数。在任何进程运行时默认都已经打开了三个流对象和它们的文件描述
2012-05-11 22:50:36 741
原创 printf()和sprintf()的返回值
二者的返回值为输出的信息的字符个数。包括特殊字符,如控制字符,空格。#include #include int main(void){ int i = printf("I Love You\n"); printf("i is %d\n", i); exit(EXIT_SUCCESS);}输出结果为:i is 11
2012-05-11 22:50:05 1522
原创 从文件写入和读取结构体示例代码
/****************************************************** author :杨志永* date :2012-04-15* E-mail:ljy520zhiyong@163.com* QQ :929168233** filename:structs_io.c** Sytem:Debian 6.0.4* GCC:4.6
2012-05-11 22:48:55 1307
原创 ANSI C 中的 printf
1.long : %ld2.long unsigned int : %lu3.double : %lf4.float : %f5.char : %c6. int : %d7.指针: %p8.八进制: %o9.十进制,八进制,十
2012-05-11 22:47:23 674
原创 ANSI C文件操作函数
1.打开文件: extern FILE *fopen(__const char *__restrict __filename, __const *__restrict __modes); 如果执行成功,将返回打开文件的文件指针;如果执行失败,将返回NULL。2.关闭文件: extern int fclose(FILE *__stream); 如果
2012-05-11 22:46:39 980
转载 GRUB RESCUE下 修复Linux引导
前段时间修复移动硬盘分区表的时候,把本本的分区也重新弄了下,导致ubuntu的grub找不到linux分区(由于root分区uuid改变造成的不能正常启动),切换到Linux系统时,提示错误“unknown filesystem”,进入grub rescue模式。在Google上搜了一下,终于解决了,方法如下:1. 首先使用set命令,查看当前配置信息;2. 然后再使用ls命令,遍历一
2012-05-11 22:45:55 7572
原创 Linux下进程与环境变量
1.在shell下可以通过命令env或set查看当前系统的环境变量信息。2.获取环境变量的值: extern char * getenv(__const char *__name) 如果执行成功,此函数返回指定环境变量的值,否则返回NULL。3.添加环境变量: extern int putenv (char *__string); 如
2012-05-11 22:45:10 1896
原创 main函数参数
1.main函数原型: int main(int argc, char * argv[], char * envp[]);2. argc:是命令行参数的数目(这个值包含命令本身,如果后面没有参数,则argc=1) argv:是一个指针数组,其各成员依次指向各参数,即argv[0]指向命令本身。指针数据的最后一个成员为NULL,以区别结束。 envp:存放是
2012-05-11 22:42:36 740
原创 realloc()函数
1.它用来在堆中更改已经配置好的内存空间。其函数声明如下: extern void * realloc(void *__ptr, size_t __size); 第一个参数为试图更改大小的原堆空间的位置,size为新的内存大小。2.减小内存: realloc()仅仅更改索引信息,但并不代表被减少的部分还可以访问,减少部分的内存将交给操作系统管理。
2012-05-11 22:41:57 762
Postgresql 教程
2011-10-03
俄罗斯方块,包括文档与演示
2011-09-06
俄罗斯方块源码与文档的写作
2011-09-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人