程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #

Size: px
Start display at page:

Download "程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #"

Transcription

1 程序 14-9 linux/include/string.h 1 #ifndef _STRING_H_ 2 #define _STRING_H_ 3 4 #ifndef NULL 5 #define NULL ((void *) 0) 6 #endif 7 8 #ifndef _SIZE_T 9 #define _SIZE_T 10 typedef unsigned int size_t; 11 #endif extern char * strerror(int errno); /* 16 * This string-include defines all string functions as inline 17 * functions. Use gcc. It also assumes ds=es=data space, this should be 18 * normal. Most of the string-functions are rather heavily hand-optimized, 19 * see especially strtok,strstr,str[c]spn. They should work, but are not 20 * very easy to understand. Everything is done entirely within the register 21 * set, making the functions fast and clean. String instructions have been 22 * used through-out, making for "slightly" unclear code :-) 23 * 24 * (C) 1991 Linus Torvalds 25 */ /* * 这个字符串头文件以内嵌函数的形式定义了所有字符串操作函数 使用 gcc 时, 同时 * 假定了 ds=es= 数据空间, 这应该是常规的 绝大多数字符串函数都是经手工进行大量 * 优化的, 尤其是函数 strtok strstr str[c]spn 它们应该能正常工作, 但却不是那 * 么容易理解 所有的操作基本上都是使用寄存器集来完成的, 这使得函数即快又整洁 * 所有地方都使用了字符串指令, 这又使得代码 稍微 难以理解 * * (C) 1991 Linus Torvalds */ 26 //// 将一个字符串 (src) 拷贝到另一个字符串 (dest), 直到遇到 NULL 字符后停止 // 参数 :dest - 目的字符串指针,src - 源字符串指针 // %0 - esi(src),%1 - edi(dest) 27 extern inline char * strcpy(char * dest,const char *src) 28 { 29 asm ("cld\n" // 清方向位 30 "1:\tlodsb\n\t" // 加载 DS:[esi] 处 1 字节 al, 并更新 esi 31 "stosb\n\t" // 存储字节 al ES:[edi], 并更新 edi 32 "testb %%al,%%al\n\t" // 刚存储的字节是 0? 33 "jne 1b" // 不是则向后跳转到标号 1 处, 否则结束 34 ::"S" (src),"d" (dest):"si","di","ax"); 35 return dest; // 返回目的字符串指针 36 } 37 //// 拷贝源字符串 count 个字节到目的字符串 // 如果源串长度小于 count 个字节, 就附加空字符 (NULL) 到目的字符串 // 参数 :dest - 目的字符串指针,src - 源字符串指针,count - 拷贝字节数

2 // %0 - esi(src),%1 - edi(dest),%2 - ecx(count) 38 extern inline char * strncpy(char * dest,const char *src,int count) 39 { 40 asm ("cld\n" // 清方向位 41 "1:\tdecl %2\n\t" // 寄存器 ecx--(count--) 42 "js 2f\n\t" // 如果 count<0 则向前跳转到标号 2, 结束 43 "lodsb\n\t" // 取 ds:[esi] 处 1 字节 al, 并且 esi++ 44 "stosb\n\t" // 存储该字节 es:[edi], 并且 edi++ 45 "testb %%al,%%al\n\t" // 该字节是 0? 46 "jne 1b\n\t" // 不是, 则向前跳转到标号 1 处继续拷贝 47 "rep\n\t" // 否则, 在目的串中存放剩余个数的空字符 48 "stosb\n" 49 "2:" 50 ::"S" (src),"d" (dest),"c" (count):"si","di","ax","cx"); 51 return dest; // 返回目的字符串指针 52 } 53 //// 将源字符串拷贝到目的字符串的末尾处 // 参数 :dest - 目的字符串指针,src - 源字符串指针 // %0 - esi(src),%1 - edi(dest),%2 - eax(0),%3 - ecx(-1) 54 extern inline char * strcat(char * dest,const char * src) 55 { 56 asm ("cld\n\t" // 清方向位 57 "repne\n\t" // 比较 al 与 es:[edi] 字节, 并更新 edi++, 58 "scasb\n\t" // 直到找到目的串中是 0 的字节, 此时 edi 已指向后 1 字节 59 "decl %1\n" // 让 es:[edi] 指向 0 值字节 60 "1:\tlodsb\n\t" // 取源字符串字节 ds:[esi] al, 并 esi++ 61 "stosb\n\t" // 将该字节存到 es:[edi], 并 edi++ 62 "testb %%al,%%al\n\t" // 该字节是 0? 63 "jne 1b" // 不是, 则向后跳转到标号 1 处继续拷贝, 否则结束 64 ::"S" (src),"d" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx"); 65 return dest; // 返回目的字符串指针 66 } 67 //// 将源字符串的 count 个字节复制到目的字符串的末尾处, 最后添一空字符 // 参数 :dest - 目的字符串,src - 源字符串,count - 欲复制的字节数 // %0 - esi(src),%1 - edi(dest),%2 - eax(0),%3 - ecx(-1),%4 - (count) 68 extern inline char * strncat(char * dest,const char * src,int count) 69 { 70 asm ("cld\n\t" // 清方向位 71 "repne\n\t" // 比较 al 与 es:[edi] 字节,edi++ 72 "scasb\n\t" // 直到找到目的串的末端 0 值字节 73 "decl %1\n\t" // edi 指向该 0 值字节 74 "movl %4,%3\n" // 欲复制字节数 ecx 75 "1:\tdecl %3\n\t" // ecx--( 从 0 开始计数 ) 76 "js 2f\n\t" // ecx <0?, 是则向前跳转到标号 2 处 77 "lodsb\n\t" // 否则取 ds:[esi] 处的字节 al,esi++ 78 "stosb\n\t" // 存储到 es:[edi] 处,edi++ 79 "testb %%al,%%al\n\t" // 该字节值为 0? 80 "jne 1b\n" // 不是则向后跳转到标号 1 处, 继续复制 81 "2:\txorl %2,%2\n\t" // 将 al 清零 82 "stosb" // 存到 es:[edi] 处 83 ::"S" (src),"d" (dest),"a" (0),"c" (0xffffffff),"g" (count)

3 84 :"si","di","ax","cx"); 85 return dest; // 返回目的字符串指针 86 } 87 //// 将一个字符串与另一个字符串进行比较 // 参数 :cs - 字符串 1,ct - 字符串 2 // %0 - eax( res) 返回值,%1 - edi(cs) 字符串 1 指针,%2 - esi(ct) 字符串 2 指针 // 返回 : 如果串 1 > 串 2, 则返回 1; 串 1 = 串 2, 则返回 0; 串 1 < 串 2, 则返回 -1 // 第 90 行定义了一个局部寄存器变量 该变量将被保存在 eax 寄存器中, 以便于高效访问和操作 // 这种定义变量的方法主要用于内嵌汇编程序中 详细说明参见 gcc 手册 指定寄存器中的变量 88 extern inline int strcmp(const char * cs,const char * ct) 89 { 90 register int res asm ("ax"); // res 是寄存器变量 (eax) 91 asm ("cld\n" // 清方向位 92 "1:\tlodsb\n\t" // 取字符串 2 的字节 ds:[esi] al, 并且 esi++ 93 "scasb\n\t" // al 与字符串 1 的字节 es:[edi] 作比较, 并且 edi++ 94 "jne 2f\n\t" // 如果不相等, 则向前跳转到标号 2 95 "testb %%al,%%al\n\t" // 该字节是 0 值字节吗 ( 字符串结尾 )? 96 "jne 1b\n\t" // 不是, 则向后跳转到标号 1, 继续比较 97 "xorl %%eax,%%eax\n\t" // 是, 则返回值 eax 清零, 98 "jmp 3f\n" // 向前跳转到标号 3, 结束 99 "2:\tmovl $1,%%eax\n\t" // eax 中置 "jl 3f\n\t" // 若前面比较中串 2 字符 < 串 1 字符, 则返回正值结束 101 "negl %%eax\n" // 否则 eax = -eax, 返回负值, 结束 102 "3:" 103 :"=a" ( res):"d" (cs),"s" (ct):"si","di"); 104 return res; // 返回比较结果 105 } 106 //// 字符串 1 与字符串 2 的前 count 个字符进行比较 // 参数 :cs - 字符串 1,ct - 字符串 2,count - 比较的字符数 // %0 - eax( res) 返回值,%1 - edi(cs) 串 1 指针,%2 - esi(ct) 串 2 指针,%3 - ecx(count) // 返回 : 如果串 1 > 串 2, 则返回 1; 串 1 = 串 2, 则返回 0; 串 1 < 串 2, 则返回 extern inline int strncmp(const char * cs,const char * ct,int count) 108 { 109 register int res asm ("ax"); // res 是寄存器变量 (eax) 110 asm ("cld\n" // 清方向位 111 "1:\tdecl %3\n\t" // count "js 2f\n\t" // 如果 count<0, 则向前跳转到标号 "lodsb\n\t" // 取串 2 的字符 ds:[esi] al, 并且 esi "scasb\n\t" // 比较 al 与串 1 的字符 es:[edi], 并且 edi "jne 3f\n\t" // 如果不相等, 则向前跳转到标号 "testb %%al,%%al\n\t" // 该字符是 NULL 字符吗? 117 "jne 1b\n" // 不是, 则向后跳转到标号 1, 继续比较 118 "2:\txorl %%eax,%%eax\n\t" // 是 NULL 字符, 则 eax 清零 ( 返回值 ) 119 "jmp 4f\n" // 向前跳转到标号 4, 结束 120 "3:\tmovl $1,%%eax\n\t" // eax 中置 "jl 4f\n\t" // 如果前面比较中串 2 字符 < 串 1 字符, 则返回 1 结束 122 "negl %%eax\n" // 否则 eax = -eax, 返回负值, 结束 123 "4:" 124 :"=a" ( res):"d" (cs),"s" (ct),"c" (count):"si","di","cx"); 125 return res; // 返回比较结果 126 }

4 127 //// 在字符串中寻找第一个匹配的字符 // 参数 :s - 字符串,c - 欲寻找的字符 // %0 - eax( res),%1 - esi( 字符串指针 s),%2 - eax( 字符 c) // 返回 : 返回字符串中第一次出现匹配字符的指针 若没有找到匹配的字符, 则返回空指针 128 extern inline char * strchr(const char * s,char c) 129 { 130 register char * res asm ("ax"); // res 是寄存器变量 (eax) 131 asm ("cld\n\t" // 清方向位 132 "movb %%al,%%ah\n" // 将欲比较字符移到 ah 133 "1:\tlodsb\n\t" // 取字符串中字符 ds:[esi] al, 并且 esi "cmpb %%ah,%%al\n\t" // 字符串中字符 al 与指定字符 ah 相比较 135 "je 2f\n\t" // 若相等, 则向前跳转到标号 2 处 136 "testb %%al,%%al\n\t" // al 中字符是 NULL 字符吗?( 字符串结尾?) 137 "jne 1b\n\t" // 若不是, 则向后跳转到标号 1, 继续比较 138 "movl $1,%1\n" // 是, 则说明没有找到匹配字符,esi 置 "2:\tmovl %1,%0\n\t" // 将指向匹配字符后一个字节处的指针值放入 eax 140 "decl %0" // 将指针调整为指向匹配的字符 141 :"=a" ( res):"s" (s),"0" (c):"si"); 142 return res; // 返回指针 143 } 144 //// 寻找字符串中指定字符最后一次出现的地方 ( 反向搜索字符串 ) // 参数 :s - 字符串,c - 欲寻找的字符 // %0 - edx( res),%1 - edx(0),%2 - esi( 字符串指针 s),%3 - eax( 字符 c) // 返回 : 返回字符串中最后一次出现匹配字符的指针 若没有找到匹配的字符, 则返回空指针 145 extern inline char * strrchr(const char * s,char c) 146 { 147 register char * res asm ("dx"); // res 是寄存器变量 (edx) 148 asm ("cld\n\t" // 清方向位 149 "movb %%al,%%ah\n" // 将欲寻找的字符移到 ah 150 "1:\tlodsb\n\t" // 取字符串中字符 ds:[esi] al, 并且 esi "cmpb %%ah,%%al\n\t" // 字符串中字符 al 与指定字符 ah 作比较 152 "jne 2f\n\t" // 若不相等, 则向前跳转到标号 2 处 153 "movl %%esi,%0\n\t" // 将字符指针保存到 edx 中 154 "decl %0\n" // 指针后退一位, 指向字符串中匹配字符处 155 "2:\ttestb %%al,%%al\n\t" // 比较的字符是 0 吗 ( 到字符串尾 )? 156 "jne 1b" // 不是则向后跳转到标号 1 处, 继续比较 157 :"=d" ( res):"0" (0),"S" (s),"a" (c):"ax","si"); 158 return res; // 返回指针 159 } 160 //// 在字符串 1 中寻找第 1 个字符序列, 该字符序列中的任何字符都包含在字符串 2 中 // 参数 :cs - 字符串 1 指针,ct - 字符串 2 指针 // %0 - esi( res),%1 - eax(0),%2 - ecx(-1),%3 - esi( 串 1 指针 cs),%4 - ( 串 2 指针 ct) // 返回字符串 1 中包含字符串 2 中任何字符的首个字符序列的长度值 161 extern inline int strspn(const char * cs, const char * ct) 162 { 163 register char * res asm ("si"); // res 是寄存器变量 (esi) 164 asm ("cld\n\t" // 清方向位 165 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 166 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 )

5 168 "notl %%ecx\n\t" // ecx 中每位取反 169 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 170 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 171 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 173 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 174 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 175 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 176 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 178 "je 1b\n" // 如果相等, 则向后跳转到标号 1 处 179 "2:\tdecl %0" // esi--, 指向最后一个包含在串 2 中的字符 180 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 181 :"ax","cx","dx","di"); 182 return res-cs; // 返回字符序列的长度值 183 } 184 //// 寻找字符串 1 中不包含字符串 2 中任何字符的首个字符序列 // 参数 :cs - 字符串 1 指针,ct - 字符串 2 指针 // %0 - esi( res),%1 - eax(0),%2 - ecx(-1),%3 - esi( 串 1 指针 cs),%4 - ( 串 2 指针 ct) // 返回字符串 1 中不包含字符串 2 中任何字符的首个字符序列的长度值 185 extern inline int strcspn(const char * cs, const char * ct) 186 { 187 register char * res asm ("si"); // res 是寄存器变量 (esi) 188 asm ("cld\n\t" // 清方向位 189 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 190 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 192 "notl %%ecx\n\t" // ecx 中每位取反 193 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 194 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 195 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 197 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 198 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 199 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 200 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 202 "jne 1b\n" // 如果不相等, 则向后跳转到标号 1 处 203 "2:\tdecl %0" // esi--, 指向最后一个包含在串 2 中的字符 204 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 205 :"ax","cx","dx","di"); 206 return res-cs; // 返回字符序列的长度值 207 } 208 //// 在字符串 1 中寻找首个包含在字符串 2 中的任何字符 // 参数 :cs - 字符串 1 的指针,ct - 字符串 2 的指针 // %0 -esi( res),%1 -eax(0),%2 -ecx(0xffffffff),%3 -esi( 串 1 指针 cs),%4 -( 串 2 指针 ct) // 返回字符串 1 中首个包含字符串 2 中字符的指针 209 extern inline char * strpbrk(const char * cs,const char * ct) 210 { 211 register char * res asm ("si"); // res 是寄存器变量 (esi) 212 asm ("cld\n\t" // 清方向位

6 213 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 214 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 216 "notl %%ecx\n\t" // ecx 中每位取反 217 "decl %%ecx\n\t" // ecx--, 得串 2 的长度值 218 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 219 "1:\tlodsb\n\t" // 取串 1 字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符等于 0 值吗 ( 串 1 结尾 )? 221 "je 2f\n\t" // 如果是, 则向前跳转到标号 2 处 222 "movl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 223 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 224 "repne\n\t" // 比较 al 与串 2 中字符 es:[edi], 并且 edi "scasb\n\t" // 如果不相等就继续比较 226 "jne 1b\n\t" // 如果不相等, 则向后跳转到标号 1 处 227 "decl %0\n\t" // esi--, 指向一个包含在串 2 中的字符 228 "jmp 3f\n" // 向前跳转到标号 3 处 229 "2:\txorl %0,%0\n" // 没有找到符合条件的, 将返回值为 NULL 230 "3:" 231 :"=S" ( res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) 232 :"ax","cx","dx","di"); 233 return res; // 返回指针值 234 } 235 //// 在字符串 1 中寻找首个匹配整个字符串 2 的字符串 // 参数 :cs - 字符串 1 的指针,ct - 字符串 2 的指针 // %0 -eax( res),%1 -eax(0),%2 -ecx(0xffffffff),%3 -esi( 串 1 指针 cs),%4 -( 串 2 指针 ct) // 返回 : 返回字符串 1 中首个匹配字符串 2 的字符串指针 236 extern inline char * strstr(const char * cs,const char * ct) 237 { 238 register char * res asm ("ax"); // res 是寄存器变量 (eax) 239 asm ("cld\n\t" \ // 清方向位 240 "movl %4,%%edi\n\t" // 首先计算串 2 的长度 串 2 指针放入 edi 中 241 "repne\n\t" // 比较 al(0) 与串 2 中的字符 (es:[edi]), 并 edi "scasb\n\t" // 如果不相等就继续比较 (ecx 逐步递减 ) 243 "notl %%ecx\n\t" // ecx 中每位取反 244 "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ /* 注意! 如果搜索串为空, 将设置 Z 标志 */ // 得串 2 的长度值 245 "movl %%ecx,%%edx\n" // 将串 2 的长度值暂放入 edx 中 246 "1:\tmovl %4,%%edi\n\t" // 取串 2 头指针放入 edi 中 247 "movl %%esi,%%eax\n\t" // 将串 1 的指针复制到 eax 中 248 "movl %%edx,%%ecx\n\t" // 再将串 2 的长度值放入 ecx 中 249 "repe\n\t" // 比较串 1 和串 2 字符 (ds:[esi],es:[edi]),esi++,edi "cmpsb\n\t" // 若对应字符相等就一直比较下去 251 "je 2f\n\t" /* also works for empty string, see above */ /* 对空串同样有效, 见上面 */ // 若全相等, 则转到标号 "xchgl %%eax,%%esi\n\t" // 串 1 头指针 esi, 比较结果的串 1 指针 eax 253 "incl %%esi\n\t" // 串 1 头指针指向下一个字符 254 "cmpb $0,-1(%%eax)\n\t" // 串 1 指针 (eax-1) 所指字节是 0 吗? 255 "jne 1b\n\t" // 不是则转到标号 1, 继续从串 1 的第 2 个字符开始比较 256 "xorl %%eax,%%eax\n\t" // 清 eax, 表示没有找到匹配 257 "2:" 258 :"=a" ( res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) 259 :"cx","dx","di","si");

7 260 return res; // 返回比较结果 261 } 262 //// 计算字符串长度 // 参数 :s - 字符串 // %0 - ecx( res),%1 - edi( 字符串指针 s),%2 - eax(0),%3 - ecx(0xffffffff) // 返回 : 返回字符串的长度 263 extern inline int strlen(const char * s) 264 { 265 register int res asm ("cx"); // res 是寄存器变量 (ecx) 266 asm ("cld\n\t" // 清方向位 267 "repne\n\t" // al(0) 与字符串中字符 es:[edi] 比较, 268 "scasb\n\t" // 若不相等就一直比较 269 "notl %0\n\t" // ecx 取反 270 "decl %0" // ecx--, 得字符串得长度值 271 :"=c" ( res):"d" (s),"a" (0),"0" (0xffffffff):"di"); 272 return res; // 返回字符串长度值 273 } extern char * strtok; // 用于临时存放指向下面被分析字符串 1(s) 的指针 276 //// 利用字符串 2 中的字符将字符串 1 分割成标记 (tokern) 序列 // 将串 1 看作是包含零个或多个单词 (token) 的序列, 并由分割符字符串 2 中的一个或多个字符 // 分开 第一次调用 strtok() 时, 将返回指向字符串 1 中第 1 个 token 首字符的指针, 并在返 // 回 token 时将一 null 字符写到分割符处 后续使用 null 作为字符串 1 的调用, 将用这种方 // 法继续扫描字符串 1, 直到没有 token 为止 在不同的调用过程中, 分割符串 2 可以不同 // 参数 :s - 待处理的字符串 1,ct - 包含各个分割符的字符串 2 // 汇编输出 :%0 - ebx( res),%1 - esi( strtok); // 汇编输入 :%2 - ebx( strtok),%3 - esi( 字符串 1 指针 s),%4 - ( 字符串 2 指针 ct) // 返回 : 返回字符串 s 中第 1 个 token, 如果没有找到 token, 则返回一个 null 指针 // 后续使用字符串 s 指针为 null 的调用, 将在原字符串 s 中搜索下一个 token 277 extern inline char * strtok(char * s,const char * ct) 278 { 279 register char * res asm ("si"); 280 asm ("testl %1,%1\n\t" // 首先测试 esi( 字符串 1 指针 s) 是否是 NULL 281 "jne 1f\n\t" // 如果不是, 则表明是首次调用本函数, 跳转标号 "testl %0,%0\n\t" // 若是 NULL, 表示此次是后续调用, 测 ebx( strtok) 283 "je 8f\n\t" // 如果 ebx 指针是 NULL, 则不能处理, 跳转结束 284 "movl %0,%1\n" // 将 ebx 指针复制到 esi 285 "1:\txorl %0,%0\n\t" // 清 ebx 指针 286 "movl $-1,%%ecx\n\t" // 置 ecx = 0xffffffff 287 "xorl %%eax,%%eax\n\t" // 清零 eax 288 "cld\n\t" // 清方向位 289 "movl %4,%%edi\n\t" // 下面求字符串 2 的长度 edi 指向字符串 "repne\n\t" // 将 al(0) 与 es:[edi] 比较, 并且 edi "scasb\n\t" // 直到找到字符串 2 的结束 null 字符, 或计数 ecx==0 292 "notl %%ecx\n\t" // 将 ecx 取反, 293 "decl %%ecx\n\t" // ecx--, 得到字符串 2 的长度值 294 "je 7f\n\t" /* empty delimeter-string */ /* 分割符字符串空 */ // 若串 2 长度为 0, 则转标号 "movl %%ecx,%%edx\n" // 将串 2 长度暂存入 edx 296 "2:\tlodsb\n\t" // 取串 1 的字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符为 0 值吗 ( 串 1 结束 )?

8 298 "je 7f\n\t" // 如果是, 则跳转标号 "movl %4,%%edi\n\t" // edi 再次指向串 2 首 300 "movl %%edx,%%ecx\n\t" // 取串 2 的长度值置入计数器 ecx 301 "repne\n\t" // 将 al 中串 1 的字符与串 2 中所有字符比较, 302 "scasb\n\t" // 判断该字符是否为分割符 303 "je 2b\n\t" // 若能在串 2 中找到相同字符 ( 分割符 ), 则跳转标号 "decl %1\n\t" // 若不是分割符, 则串 1 指针 esi 指向此时的该字符 305 "cmpb $0,(%1)\n\t" // 该字符是 NULL 字符吗? 306 "je 7f\n\t" // 若是, 则跳转标号 7 处 307 "movl %1,%0\n" // 将该字符的指针 esi 存放在 ebx 308 "3:\tlodsb\n\t" // 取串 1 下一个字符 ds:[esi] al, 并且 esi "testb %%al,%%al\n\t" // 该字符是 NULL 字符吗? 310 "je 5f\n\t" // 若是, 表示串 1 结束, 跳转到标号 "movl %4,%%edi\n\t" // edi 再次指向串 2 首 312 "movl %%edx,%%ecx\n\t" // 串 2 长度值置入计数器 ecx 313 "repne\n\t" // 将 al 中串 1 的字符与串 2 中每个字符比较, 314 "scasb\n\t" // 测试 al 字符是否是分割符 315 "jne 3b\n\t" // 若不是分割符则跳转标号 3, 检测串 1 中下一个字符 316 "decl %1\n\t" // 若是分割符, 则 esi--, 指向该分割符字符 317 "cmpb $0,(%1)\n\t" // 该分割符是 NULL 字符吗? 318 "je 5f\n\t" // 若是, 则跳转到标号 "movb $0,(%1)\n\t" // 若不是, 则将该分割符用 NULL 字符替换掉 320 "incl %1\n\t" // esi 指向串 1 中下一个字符, 也即剩余串首 321 "jmp 6f\n" // 跳转标号 6 处 322 "5:\txorl %1,%1\n" // esi 清零 323 "6:\tcmpb $0,(%0)\n\t" // ebx 指针指向 NULL 字符吗? 324 "jne 7f\n\t" // 若不是, 则跳转标号 "xorl %0,%0\n" // 若是, 则让 ebx=null 326 "7:\ttestl %0,%0\n\t" // ebx 指针为 NULL 吗? 327 "jne 8f\n\t" // 若不是则跳转 8, 结束汇编代码 328 "movl %0,%1\n" // 将 esi 置为 NULL 329 "8:" 330 :"=b" ( res),"=s" ( strtok) 331 :"0" ( strtok),"1" (s),"g" (ct) 332 :"ax","cx","dx","di"); 333 return res; // 返回指向新 token 的指针 334 } 335 //// 内存块复制 从源地址 src 处开始复制 n 个字节到目的地址 dest 处 // 参数 :dest - 复制的目的地址,src - 复制的源地址,n - 复制字节数 // %0 - ecx(n),%1 - esi(src),%2 - edi(dest) 336 extern inline void * memcpy(void * dest,const void * src, int n) 337 { 338 asm ("cld\n\t" // 清方向位 339 "rep\n\t" // 重复执行复制 ecx 个字节, 340 "movsb" // 从 ds:[esi] 到 es:[edi],esi++,edi ::"c" (n),"s" (src),"d" (dest) 342 :"cx","si","di"); 343 return dest; // 返回目的地址 344 } 345 //// 内存块移动 同内存块复制, 但考虑移动的方向 // 参数 :dest - 复制的目的地址,src - 复制的源地址,n - 复制字节数

9 // 若 dest<src 则 :%0 - ecx(n),%1 - esi(src),%2 - edi(dest) // 否则 :%0 - ecx(n),%1 - esi(src+n-1),%2 - edi(dest+n-1) // 这样操作是为了防止在复制时错误地重叠覆盖 346 extern inline void * memmove(void * dest,const void * src, int n) 347 { 348 if (dest<src) 349 asm ("cld\n\t" // 清方向位 350 "rep\n\t" // 从 ds:[esi] 到 es:[edi], 并且 esi++,edi++, 351 "movsb" // 重复执行复制 ecx 字节 352 ::"c" (n),"s" (src),"d" (dest) 353 :"cx","si","di"); 354 else 355 asm ("std\n\t" // 置方向位, 从末端开始复制 356 "rep\n\t" // 从 ds:[esi] 到 es:[edi], 并且 esi--,edi--, 357 "movsb" // 复制 ecx 个字节 358 ::"c" (n),"s" (src+n-1),"d" (dest+n-1) 359 :"cx","si","di"); 360 return dest; 361 } 362 //// 比较 n 个字节的两块内存 ( 两个字符串 ), 即使遇上 NULL 字节也不停止比较 // 参数 :cs - 内存块 1 地址,ct - 内存块 2 地址,count - 比较的字节数 // %0 - eax( res),%1 - eax(0),%2 - edi( 内存块 1),%3 - esi( 内存块 2),%4 - ecx(count) // 返回 : 若块 1> 块 2 返回 1; 块 1< 块 2, 返回 -1; 块 1== 块 2, 则返回 extern inline int memcmp(const void * cs,const void * ct,int count) 364 { 365 register int res asm ("ax"); // res 是寄存器变量 366 asm ("cld\n\t" // 清方向位 367 "repe\n\t" // 如果相等则重复, 368 "cmpsb\n\t" // 比较 ds:[esi] 与 es:[edi] 的内容, 并且 esi++,edi "je 1f\n\t" // 如果都相同, 则跳转到标号 1, 返回 0(eax) 值 370 "movl $1,%%eax\n\t" // 否则 eax 置 1, 371 "jl 1f\n\t" // 若内存块 2 内容的值 < 内存块 1, 则跳转标号 "negl %%eax\n" // 否则 eax = -eax 373 "1:" 374 :"=a" ( res):"0" (0),"D" (cs),"s" (ct),"c" (count) 375 :"si","di","cx"); 376 return res; // 返回比较结果 377 } 378 //// 在 n 字节大小的内存块 ( 字符串 ) 中寻找指定字符 // 参数 :cs - 指定内存块地址,c - 指定的字符,count - 内存块长度 // %0 - edi( res),%1 - eax( 字符 c),%2 - edi( 内存块地址 cs),%3 - ecx( 字节数 count) // 返回第一个匹配字符的指针, 如果没有找到, 则返回 NULL 字符 379 extern inline void * memchr(const void * cs,char c,int count) 380 { 381 register void * res asm ("di"); // res 是寄存器变量 382 if (!count) // 如果内存块长度 ==0, 则返回 NULL, 没有找到 383 return NULL; 384 asm ("cld\n\t" // 清方向位 385 "repne\n\t" // 如果不相等则重复执行下面语句, 386 "scasb\n\t" // al 中字符与 es:[edi] 字符作比较, 并且 edi++, 387 "je 1f\n\t" // 如果相等则向前跳转到标号 1 处

10 388 "movl $1,%0\n" // 否则 edi 中置 "1:\tdecl %0" // 让 edi 指向找到的字符 ( 或是 NULL) 390 :"=D" ( res):"a" (c),"d" (cs),"c" (count) 391 :"cx"); 392 return res; // 返回字符指针 393 } 394 //// 用字符填写指定长度内存块 // 用字符 c 填写 s 指向的内存区域, 共填 count 字节 // %0 - eax( 字符 c),%1 - edi( 内存地址 ),%2 - ecx( 字节数 count) 395 extern inline void * memset(void * s,char c,int count) 396 { 397 asm ("cld\n\t" // 清方向位 398 "rep\n\t" // 重复 ecx 指定的次数, 执行 399 "stosb" // 将 al 中字符存入 es:[edi] 中, 并且 edi ::"a" (c),"d" (s),"c" (count) 401 :"cx","di"); 402 return s; 403 } #endif 406

附錄C.doc

附錄C.doc C C C-1 C -2 C -3 C -4 C -5 / C -6 2 C/C++ C-1 FILE* fopen(const char* filename, const char* mode) filename NULL FILE* freopen(const

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p = &a A. *p = *a B. p = *a C.p = &a D. *p =

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

北京大学

北京大学 1 string 类 郭炜刘家瑛 北京大学程序设计实习 string 类 string 类是一个模板类, 它的定义如下 : typedef basic_string string; 使用 string 类要包含头文件 string 对象的初始化 : string s1("hello"); // 一个参数的构造函数 string s2(8, x ); // 两个参数的构造函数

More information

Linux kernel exploit研究和探索

Linux kernel exploit研究和探索 Linux kernel exploit DOC alert7 PPT e4gle 2002-12-2 1 2002-12-2 2 Linux kernel exploit kernel exploit exploit exploit exploit (Kernel Buffer Overflow) (Kernel

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc 2 5 8 11 0 13 1. 13 2. 15 3. 18 1 23 1. 23 2. 26 3. 28 2 36 1. 36 2. 39 3. 42 4. 44 5. 49 6. 51 3 57 1. 57 2. 60 3. 64 4. 66 5. 70 6. 75 7. 83 8. 85 9. 88 10. 98 11. 103 12. 108 13. 112 4 115 1. 115 2.

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

程序 12-2 linux/fs/bitmap.c 1 /* 2 * linux/fs/bitmap.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* bitmap.c contains the code that handles the inode and

程序 12-2 linux/fs/bitmap.c 1 /* 2 * linux/fs/bitmap.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* bitmap.c contains the code that handles the inode and 程序 12-2 linux/fs/bitmap.c 1 /* 2 * linux/fs/bitmap.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* bitmap.c contains the code that handles the inode and block bitmaps */ /* bitmap.c 程序含有处理 i 节点和磁盘块位图的代码

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

1

1 1 2 3 4 5 GNUDebugger 6 7 void main(int argc, char **argv){ vulncpy(argv[1]); return; } void vulncpy(char *a){ char buf[30]; strcpy(buf, a); return; } *argv[1] buf Shellcode *argv[1]... &buf &buf 8 strcpy

More information

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc 2 5 8 11 0 1. 13 2. 15 3. 18 1 1. 22 2. 25 3. 27 2 1. 35 2. 38 3. 41 4. 43 5. 48 6. 50 3 1. 56 2. 59 3. 63 4. 65 5. 69 13 22 35 56 6. 74 7. 82 8. 84 9. 87 10. 97 11. 102 12. 107 13. 111 4 114 1. 114 2.

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

幻灯片 1

幻灯片 1 字符串处理是指对一系列的字母或数字的代码进行相同功能的处理 计算机中字符代码一般都采用 ASCII 码, 每个字符的代码占一个字节, 一组字符串存放在一个连续的存储区中 存放在连续的存储区中的这组字符串, 可看为一个数据块 为了提高对字符串 ( 或数据块 ) 的处理效率,8086/8088 指令系统中专门提供了一组对字符串处理的指令, 这些指令包括 : 字符串传送指令 (MOVS) 字符串比较指令

More information

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20 (Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

<4D6963726F736F667420576F7264202D2032303037C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63>

<4D6963726F736F667420576F7264202D2032303037C4EAC6D5CDA8B8DFB5C8D1A7D0A3D5D0C9FAC8ABB9FACDB3D2BBBFBCCAD4CEC4BFC6D7DBBACDCAD4BEEDBCB0B4F0B0B82DD6D8C7ECBEED2E646F63> 2007 年 普 通 高 等 学 校 招 生 全 国 统 一 考 试 ( 重 庆 卷 ) 文 综 试 卷 第 一 部 分 本 部 分 共 35 题, 每 题 4 分, 共 140 分 在 每 题 给 出 的 四 个 选 项 中, 只 有 一 项 最 符 合 题 目 的 要 求 的 读 图 1, 回 答 1-3 题 1. 某 两 洲 面 积 之 和 与 某 大 洋 面 积 十 分 接 近, 它 们 是

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

C/C++语言 - 运算符、表达式和语句

C/C++语言 - 运算符、表达式和语句 C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe

More information

一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 (

一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 ( 浙 江 大 学 2016 年 部 门 预 算 2016 年 5 月 1 一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 ( 三 ) 支 出 总 表 说 明

More information

目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年

目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年 中 南 大 学 2016 年 部 门 预 算 二 一 六 年 五 月 1 目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年 预 算 情 况 说 明 (

More information

信息参考

信息参考 内 部 资 料 注 意 保 密 信 息 参 考 2016 年 第 1 期 ( 总 第 26 期 ) 党 政 办 公 室 编 2016 年 2 月 29 日 工 作 要 点 教 育 部 2016 年 工 作 要 点 (1) 中 共 北 京 市 委 教 育 工 作 委 员 会 北 京 市 教 育 委 员 会 北 京 市 人 民 政 府 教 育 督 导 室 2015 年 工 作 要 点 (10) 中 共

More information

Microsoft Word - 15dbtb007

Microsoft Word - 15dbtb007 第 7 期 中 共 浙 江 大 学 委 员 会 办 公 室 2015 年 12 月 16 日 按 :2015 年 12 月 15 日, 学 校 召 开 了 2015 年 党 建 工 作 会 议, 党 委 书 记 金 德 水 同 志 作 出 重 要 讲 话, 深 刻 分 析 了 学 校 改 革 发 展 面 临 的 形 势, 对 加 强 和 改 进 学 校 党 的 建 设 进 行 了 部 署, 对 充

More information

程序 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #de

程序 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #de 程序 14-24 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #define _LINUX_MATH_EMU_H 8 9 #include

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民 1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平

More information

C/C++ - 字符串与字符串函数

C/C++ - 字符串与字符串函数 C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed

More information

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式] 指针 Pointers 变量指针与指针变量 Pointer of a variable 变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++

More information

今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单, 新加了个区段放病毒执行代码, 执行病毒代码, 最后跳回原入口点来执行原文件 下面就是感染后的代码的简单分析 : ; =============== S U B R O U T I N E =====================

今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单, 新加了个区段放病毒执行代码, 执行病毒代码, 最后跳回原入口点来执行原文件 下面就是感染后的代码的简单分析 : ; =============== S U B R O U T I N E ===================== 吾爱破解论坛 [LCG] [LSG] 立足软件安全和病毒分析最前端, 丰富的技术版块交相辉映, 由无数加密解密及反病毒爱好者共同维护, 留给世界一抹值得百年回眸的惊 艳, 沉淀百年来计算机应用之精华与优雅, 信息线条与生活质感淡定交融, 任岁月流转, 低调而奢华的技术交流与研究却是亘古不变 标题 : 一个感染样本的简单分析 作者 :ximo 今天刚发现的, 比较简单, 于是就来简单分析下吧 该感染样本很简单,

More information

Microsoft Word - QQScLauncher逆向分享.docx

Microsoft Word - QQScLauncher逆向分享.docx QQScLauncher 逆向分析 逆向版本 :QQ2011 正式版 (2425) 逆向目的 : 只是感兴趣, 没有任何其他意图版权声明 : 本文档由代码疯子整理, 在保留本文档版权声明和原始出处的前提下欢迎转载! 需要工具 :IDA Pro Ollydbg 正文内容 : 在 QQ 最新版 (QQ2011 正式版 ) 中加入了不少新功能, 如手写 视频群聊 语音输入等, 另外还有一个功能是可以把好友拖放到桌面上,

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

C/C++程序设计 - 字符串与格式化输入/输出

C/C++程序设计 - 字符串与格式化输入/输出 C/C++ / Table of contents 1. 2. 3. 4. 1 i # include # include // density of human body : 1. 04 e3 kg / m ^3 # define DENSITY 1. 04 e3 int main ( void ) { float weight, volume ; int

More information

1 CPU interrupt INT trap CPU exception

1 CPU interrupt INT trap CPU exception 1 CPU interrupt INT trap CPU exception 2 X86 CPU gate 64 16 1 2 5 8 16 16 P DPL 00101 TSS 101 DPL P 1 64 16 1 2 1 1 3 3 5 16 16 16 P DPL 0 D 000 16 110 111 100 D 1=32 0=16 DPL P 1 INT DPL1>=CPL>=DPL CPU

More information

文件

文件 CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111

More information

幻灯片 1

幻灯片 1 操作系统课程实验 Lab1:bootloader 启动 ucore os 大纲 x86 启动顺序 C 函数调用 gcc 内联汇编 (inline assembly) x86-32 下的中断处理 理解 x86-32 平台的启动过程理解 x86-32 的实模式 保护模式理解段机制 x86 启动顺序 x86 启动顺序 寄存器初始值 摘自 "IA-32 Intel 体系结构软件开发者手册 " x86 启动顺序

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

1 32 a + b a + b 2 2 a b a b 2 2 2 4a 12a + 9 a 6 2 4 a 12a + 9 a 6 ( 2a 3) 2 a 6 3 1 2 4 + 2 4 8 + 3 6 12 + 1 3 9 + 2 6 18+ 3 9 27 + 1 10 1 10 ax + by = 2 cx 7y = 8 1 2 1 4 1 8 1

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

. v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20

. v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20 Page 1 of 20 . v dx v d () () l s dl s d (_) d () v s v s () a dv a d (_) ( ) ( ) x- = v- = = v 0 = m/s a = = m/s 2 a- = ( ) x- v- a- Page 2 of 20 (1) x v a (2) x v a x v (3) x v a x v a x v Page 3 of

More information

标题

标题 共 青 团 中 央 文 件 中 青 发 也 2010 页 8 号 茵 绎 关 于 表 彰 2009 年 度 全 国 优 秀 共 青 团 员 冶 全 国 优 秀 共 青 团 干 部 冶 全 国 五 四 红 旗 团 委 ( 团 支 部 ) 冶 的 决 定 (2010 年 4 月 28 日 ) 2009 年 以 来, 全 国 各 级 团 组 织 按 照 力 争 使 团 的 基 层 组 织 网 络 覆 盖

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

42 2141601026 2016 11 27 2 1.1............................................. 2 1.2....................................... 2 1.2.1......................................... 2 1.3.............................................

More information

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63>

<4D6963726F736F667420576F7264202D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6B0B8C0FDB5BCD1A75FD1F9D5C22E646F63> 因 为 路 过 你 的 路, 因 为 苦 过 你 的 苦, 所 以 快 乐 着 你 的 快 乐, 追 逐 着 你 的 追 逐 内 容 简 介 本 书 根 据 2005 年 下 半 年 实 施 的 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 嵌 入 式 系 统 设 计 师 级 考 试 大 纲 精 神, 在 深 入 研 究 历 年 计 算 机 技 术 与 软

More information

D/A DAC ( 1us) (10~20 ) DAC0832 1

D/A DAC ( 1us) (10~20 ) DAC0832 1 D/A DAC0832 8 ( 1us) (10~20 ) DAC0832 1 1. 20 DI7~DI0 ILE 8 8 DAC 8 D/A LE LE & RFB VREF IOUT2 IOUT1 RFB CS WR1 XFER WR2 & & AGND VCC DGND 2 DI7~DI0 ILE & 8 LE 8 DAC LE 8 D/A RFB V REF IOUT2 IOUT1 R FB

More information

(譯本)

(譯本) 城 市 規 劃 委 員 會 都 會 規 劃 小 組 委 員 會 二 零 一 二 年 五 月 十 八 日 上 午 九 時 舉 行 的 第 466 次 會 議 記 錄 出 席 者 規 劃 署 署 長 梁 焯 輝 先 生 主 席 黄 仕 進 教 授 副 主 席 何 培 斌 教 授 許 智 文 教 授 劉 文 君 女 士 李 律 仁 先 生 陸 觀 豪 先 生 陳 祖 楹 女 士 張 孝 威 先 生 何 立

More information

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客

上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 理 财 资 金, 则 客 户 面 临 产 品 期 限 延 期 调 整 等 风 险 8. 信 息 传 递 风 险 : 上 海 农 商 银 行 将 按 照 本 说 明 书 有 关 信 息 公 告 的 约 定, 进 行 产 品 信 息 披 露 客 上 海 农 商 银 行 理 财 产 品 风 险 揭 示 书 鑫 意 理 财 福 通 日 鑫 H14001 期 人 民 币 理 财 产 品 风 险 揭 示 书 尊 敬 的 客 户 : 由 于 理 财 资 金 管 理 运 用 过 程 中, 可 能 会 面 临 多 种 风 险 因 素, 因 此, 根 据 中 国 银 行 业 监 督 管 理 委 员 会 相 关 监 管 规 定 的 要 求, 在 您 选 择

More information

<4D6963726F736F667420576F7264202D20B8CAD7E9CDA8A1B232303136A1B33638BAC5B9D8D3DAD4DAC8ABD6DDB5B3D4B1D6D0BFAAD5B9D5FDB7B4B5E4D0CDD1A7CFB0BDCCD3FDBBEEB6AFB5C4CDA8D6AA2E646F63>

<4D6963726F736F667420576F7264202D20B8CAD7E9CDA8A1B232303136A1B33638BAC5B9D8D3DAD4DAC8ABD6DDB5B3D4B1D6D0BFAAD5B9D5FDB7B4B5E4D0CDD1A7CFB0BDCCD3FDBBEEB6AFB5C4CDA8D6AA2E646F63> 甘 组 通 2016 68 号 关 于 在 全 州 党 员 中 开 展 正 反 典 型 学 习 教 育 活 动 的 通 知 各 县 ( 市 ) 委, 州 委 各 部 委, 州 级 各 部 门 党 组 ( 党 委 党 工 委 ), 省 州 属 行 政 企 事 业 单 位 党 委 ( 党 组 ): 为 深 入 推 进 全 州 两 学 一 做 学 习 教 育, 教 育 引 导 全 州 党 员 以 身 边

More information

:,,,,,,,,,,,,,,,,,,,,,,,,,,, 2006 1

:,,,,,,,,,,,,,,,,,,,,,,,,,,, 2006 1 :,,,,,,,,,,,,,,,,,,,,,,,,,,, 2006 1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 1. ( ) 2. ( ) ( ) 1. ( ) 1 2. ( ) 3. ( ) 4. ( ) ( ) ( ) 1. ( ) ( ) ( )

More information

度定生老病死

度定生老病死 溫度決定生老病死作者: 馬悅淩 江蘇文藝出版社 1 受寒涼的途徑 我遇到的許多患癌症或其他重病的人 都有受寒涼的經歷 一位 44 歲的女士 患有肺癌 骨癌 腎癌 該女士總是發低熱 常規治 療一個月後效果不明顯 CT 檢查發現肺部有兩個腫塊 又繼續做進一步檢查 結果令所有人大吃一驚 腫瘤已全身轉移 3 個月後去世 家人不能理解 說 她身體一向不錯 很少生病 只是這一兩年身體弱一些 怎麼會突然得這麼重

More information

按 照 卫 计 委 的 规 划, 对 于 县 级 医 院 主 要 做 一 下 工 作 加 强 临 床 重 点 专 科 建 设, 提 升 县 级 医 院 医 疗 技 术 水 平, 并 配 备 与 专 科 建 设 目 标 一 致 的 适 宜 设 备 1. 县 医 院 除 了 将 健 全 一 级 诊 疗

按 照 卫 计 委 的 规 划, 对 于 县 级 医 院 主 要 做 一 下 工 作 加 强 临 床 重 点 专 科 建 设, 提 升 县 级 医 院 医 疗 技 术 水 平, 并 配 备 与 专 科 建 设 目 标 一 致 的 适 宜 设 备 1. 县 医 院 除 了 将 健 全 一 级 诊 疗 首 批 卫 计 委 重 点 扶 持 500 家 县 医 院 名 单 公 布 新 医 改 以 来, 分 级 诊 疗 强 基 层 一 直 都 是 重 点, 县 级 医 疗 市 场 增 长 快 速, 但 是 离 最 理 想 的 状 态 仍 有 较 大 的 差 距, 大 医 院 尤 其 是 知 名 的 三 甲 医 院 仍 是 人 满 为 患, 离 达 到 县 域 就 诊 率 达 到 90%, 基 本 做 到

More information

专科疾病诊治(二十四)

专科疾病诊治(二十四) ...1...6...9...20...22...25...28...31...34...37...40...43...48...49...53...58...71...75...78 1 ...80...83...85...92...94...95... 101... 102... 104... 107... 108...111... 119... 120... 121... 122... 124...

More information

Microsoft Word - 林金萱.docx

Microsoft Word - 林金萱.docx 改 觀 王 碧 雲 顏 面 麻 痺, 臉 腫 如 水 月, 雙 目 無 神, 左 眼 圓 瞠 暴 突, 右 眼 凹 陷 崩 垂, 下 顎 頦 部 鬆 弛 右 傾, 笑 起 來 嘴 歪 眼 斜, 兩 頰 連 接 頸 項 一 帶 猶 有 灼 傷 過 的 痕 跡 一 張 令 人 見 識 過 後 猶 帶 了 個 揮 之 不 去 的 夢 魘 般 的 鬼 臉, 正 張 牙 舞 爪 地 衝 擊 著 我 乍 然 回

More information

<4D6963726F736F667420576F7264202D20BACEECF1E2D3A3BAD6D0D2BDC0EDC2DBB5C4BACBD0C4CAC7CEB1BFC6D1A72E646F63>

<4D6963726F736F667420576F7264202D20BACEECF1E2D3A3BAD6D0D2BDC0EDC2DBB5C4BACBD0C4CAC7CEB1BFC6D1A72E646F63> 何 祚 庥 : 中 医 理 论 的 核 心 是 伪 科 学 环 球 人 物 记 者 路 琰 何 祚 庥 曾 经 有 言 : 中 国 传 统 文 化 有 90% 是 糟 粕 这 句 话 曾 引 起 的 一 场 笔 战 这 段 时 间, 一 些 学 者 发 布 告 别 中 医 的 言 论 再 次 引 起 了 何 祚 庥 对 中 医 的 关 注 开 始 谈 话 之 前, 他 手 里 拿 着 两 份 资 料

More information

<B0DACDD1D1C7BDA1BFB5B5C4C0A7C8C52E733932>

<B0DACDD1D1C7BDA1BFB5B5C4C0A7C8C52E733932> 目 录 第 一 章 认 识 亚 健 康 (1) 第 二 章 亚 健 康 状 况 (19) 第 三 章 与 亚 健 康 相 关 的 疾 病 (57) 第 四 章 防 治 亚 健 康 (65) 第 五 章 新 森 田 疗 法 (112) 摆 脱 亚 健 康 的 困 扰 第 一 章 认 识 亚 健 康 第 一 节 亚 健 康 的 症 状 亚 健 康 状 态 涉 及 的 内 容 很 广 泛, 各 种 内 脏

More information

把生命托付给谁?

把生命托付给谁? 把 生 命 托 付 给 谁? 一 个 癌 症 患 者 的 重 生 感 悟 本 报 首 席 评 论 徐 迅 雷 2012-11-11 癌 症, 不 等 于 绝 症 癌 症, 不 等 于 死 亡 著 名 作 家 记 者 凌 志 军, 将 自 己 5 年 抗 癌 的 经 历, 写 成 重 生 手 记 一 个 癌 症 患 者 的 康 复 之 路 一 书, 日 前 出 版 在 有 个 购 书 网 站 上, 我

More information

4 0 50 2 30 56 1957 527 1960 1961 1961 1957 20 50 527 19611966 10 10 0 05 2 0 30 0 20 30 50 0 30 0 20 0 10 40 50 0 500 80 1 20 0 20 5 100 10 155 6 1 0

4 0 50 2 30 56 1957 527 1960 1961 1961 1957 20 50 527 19611966 10 10 0 05 2 0 30 0 20 30 50 0 30 0 20 0 10 40 50 0 500 80 1 20 0 20 5 100 10 155 6 1 0 1873 20 1909 56 20 14 1925 1 31 6 1 2 4 25 5 12 1 5 15 15 24 26 O 515 25 525 2 25 2 2 2 2 5 2 25 2 5 520 2 2 5 25 5 130 220 510 25 16 1950 X 30 0 04 0 02 0 10 0 05 1954 0 15 0 10 0 70 0 30 0 30 0 70 0

More information

《中老年男性养生保健》

《中老年男性养生保健》 1 2 2001 1...1...2...12...18...18...20...23...28...41...43...51...51...55...71...78...82...82...91...91...91...98 2... 103... 106... 115... 118... 124... 124... 132... 134... 137... 138... 140... 141...

More information

36 asm ("mov %%fs,%%ax":"=a" ( res):); \ 37 res;}) 38 // 以下定义了一些函数原型 39 void page_exception(void); // 页异常 实际是 page_fault(mm/page.s,14) void divi

36 asm (mov %%fs,%%ax:=a ( res):); \ 37 res;}) 38 // 以下定义了一些函数原型 39 void page_exception(void); // 页异常 实际是 page_fault(mm/page.s,14) void divi 程序 8-2 linux/kernel/traps.c 1 /* 2 * linux/kernel/traps.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 /* 8 * 'Traps.c' handles hardware traps and faults after we have saved some 9 * state in 'asm.s'. Currently

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

ARM中C和汇编混合编程及示例.doc

ARM中C和汇编混合编程及示例.doc ARM 中 C 和汇编混合编程及示例 在嵌入式系统开发中, 目前使用的主要编程语言是 C 和汇编,C++ 已经有相应的编译器, 但是现在使用还是比较少的 在稍大规模的嵌入式软件中, 例如含有 OS, 大部分的代码都是用 C 编写的, 主要是因为 C 语言的结构比较好, 便于人的理解, 而且有大量的支持库 尽管如此, 很多地方还是要用到汇编语言, 例如开机时硬件系统的初始化, 包括 CPU 状态的设定,

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620

More information

,310,022, ,382,044, % 1,270,602, ,316,653, % % % 19,720,

,310,022, ,382,044, % 1,270,602, ,316,653, % % % 19,720, 2006 2006 1 1.1 1.2 1.3 1.4 1.5 2 2.1 000520 39 39 027-85321845 85703197 027-85321845 85703197 027-85321845 027-85321845 csc-hy@tom.com csc-hy@tom.com 2.2 2006 2.2.1 3,310,022,385.31 1,382,044,309.28 139.50%

More information

bingdian001.com

bingdian001.com TSM12M TSM12 STM8L152C6, STM8L152R8 MSP430F5325 whym1987@126.com! /******************************************************************************* * : TSM12.c * : * : 2013/10/21 * : TSM12, STM8L f(sysclk)

More information

Microsoft PowerPoint - lec11 [兼容模式]

Microsoft PowerPoint - lec11 [兼容模式] 代码生成 代码生成 代码生成的输入 - 各种中间代码形式 目标代码与目标机器模型 简单的代码生成器 基本块 DAG 图及代码生成 目标代码 绝对地址目标代码 可重定位的目标 - linker/loader 汇编代码 - assembler 目标机器模型 指令形式 op 源, 目的 寻址模式 - 绝对地址 :op M, R R op (M) R - 寄存器 :op R1,R2 R2 op R1 R2

More information

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

<4D6963726F736F667420576F7264202D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63> 臺 北 市 立 松 山 高 級 工 農 職 業 學 校 資 訊 科 專 題 製 作 報 告 題 目 : 反 彈 空 間 指 導 老 師 : 余 耀 銘 學 生 : 廖 國 銓 趙 信 瑋 中 華 民 國 102 年 5 月 摘 要 在 這 高 速 科 技 的 起 飛 下, 科 技 都 建 立 起 於 基 礎, 有 些 人 把 這 基 礎 轉 為 理 論, 教 給 大 眾 學 習 ; 有 些 人 利

More information

嵌入式Linux开发课程

嵌入式Linux开发课程 嵌入式 Linux 开发课程 ( 应用程序 ) 主讲人 : David.T 课程安排 1. 初识 Linux 环境下的编程 2. Linux 下的磁盘和文件 I/O 操作 3. 流式文件操作 4. 字符串操作回顾 ( 一 ) 初识 Linux 环境下的编程 1. 你的第一个程序 :Helloworld vi helloworld.c #include int main() { printf(

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

C/C++ - 结构体、共用体、枚举体

C/C++ - 结构体、共用体、枚举体 C/C++ Table of contents 1. 2. 3. 4. 5. 6. 7. 8. 1 C C (struct) C 2 C C (struct) C 2 i // book.c: # include < stdio.h> # define MAX_ TITLE 41 # define MAX_ AUTHOR 31 struct book { char title [ MAX_ TITLE

More information

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def Kaise s 2410 Board setting [1]. Device Driver Device Driver Linux s Kernel ARM s kernel s3c2410_kernel2.4.18_r1.1_change.tar.bz2 /usr/src (1) #cd /usr/src (2) #tar xfj s3c2410_kernel2.4.18_r1.1_change.tar.bz2

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

- 22-4 58 4 5 1998 12 415 416 6 431 7 1993 359

- 22-4 58 4 5 1998 12 415 416 6 431 7 1993 359 - 21-1 2 1 52 1963 1 7 154 2 1478 62 3 202 193-21 - - 22-4 58 4 5 1998 12 415 416 6 431 7 1993 359 - 23-8 8 5 1573 9 10 2120 1982 2 11 1480 729-730 - 23 - - 24-12 1007~1072 14 15 12 1997 4 9-10 13 1997

More information

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf (%d, & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf (%d %d 2013 18 ( ) 1. C pa.c, pb.c, 2. C++ pa.cpp, pb.cpp, Compilation Error cin scanf Time Limit Exceeded 1: A 5 B 5 C 5 D 5 E 5 F 5 1 2013 C 1 # include 2 int main ( void ) 3 { 4 int cases, a, b,

More information

标题

标题 本章学习导读 本章主要介绍串的定义及基本运算, 重点介绍串的存储结构, 基本运算与串的 C# 实现方法 读者学习本章后应能掌握串的定义, 串的基本运算, 运用串来实现文本输入和输出 4.1.1 串的定义 4.1 串的基本概念 字符串在应用程序中的使用非常频繁 字符串简称串, 是一种特殊的线性表, 其特殊性在于串中的数据元素是一个个的字符 在事务处理程序中, 顾客的信息如姓名 地址等及货物的名称 产地和规格等,

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

格式化字符串 Weifeng Sun School of Software, DLUT

格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串 Weifeng Sun School of Software, DLUT 格式化字符串漏洞 格式化字符串, 也是一种比较常见的漏洞类型 会触发该漏洞的函数很有限 主要就是 printf 还有 sprintf,fprintf 等等 c 库中 print 家族的函数 >int printf(const char* format,...) 2 / 42 3 / 42 A B 字符串指针 char

More information

2006年国家公务员招录考试行测真题(A)

2006年国家公务员招录考试行测真题(A) 2006 年 中 央 国 家 机 关 公 务 员 录 用 考 试 行 政 职 业 能 力 测 验 (A) 真 题 说 明 这 项 测 验 共 有 五 个 部 分,135 道 题, 总 时 限 为 120 分 钟 各 部 分 不 分 别 计 时, 但 都 给 出 了 参 考 时 限, 供 你 参 考 以 分 配 时 间 请 在 机 读 答 题 卡 上 严 格 按 照 要 求 填 写 好 自 己 的 姓

More information

C/C++语言 - C/C++数据

C/C++语言 - C/C++数据 C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;

More information

Microsoft Word - MSP430 Launchpad 指导书.docx

Microsoft Word - MSP430 Launchpad 指导书.docx Contents 3... 9... 14 MSP430 LAUNCHPAD 指导书 3 第一部分第一个工程 New Project File > New > CCS Project Project name: ButtonLED Device>Family: MSP430 Variant: MSP430G2553 Project templates and examples : Empty Project

More information

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un Linux C July 27, 2016 Contents 1 Linux IDE 1 2 GCC 3 2.1 hello.c hello.exe........................... 5 2.2............................... 9 2.2.1 -Wall................................ 9 2.2.2 -E..................................

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

SP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05

SP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05 1 SP_01...3 SP_03 JAVA...6 SP_10 SQL...8 SP_51...12 SP_32...15 SP_53...18 SP_20...21 SP_22...24 SP_21...27 SP_23...30 SP_04.NET...33 SP_02 C...37 SP_05 FLASH...39 SP_06...42 2 SP_01 1. 8. Excel 2. 9. PowerPoint

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

ebook50-15

ebook50-15 15 82 C / C + + Developer Studio M F C C C + + 83 C / C + + M F C D L L D L L 84 M F C MFC DLL M F C 85 MFC DLL 15.1 82 C/C++ C C + + D L L M F C M F C 84 Developer Studio S t u d i o 292 C _ c p l u s

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information