![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
gcc
weixin_39410618
汇编c数据结构算法操作系统编译原理希望能学到80岁吧
展开
-
snail_os 0.01 虽然没有完成,但是也要分享一下
################################################################ bochsrc.txt file for DLX Linux disk image.################################################################ how much memory the emulated machine will havemegs: 1024# filename...原创 2021-09-02 09:32:13 · 151 阅读 · 0 评论 -
nasm的Hello, World!程序应该这么写(Win32控制台)
;hello.asm 仅仅适用于win32控制台程序;nasm -f win32 -o hello.o hello.asm;gcc -o hello.exe hello.obits 32 ;这似乎不是必须的,但nasm还可以编译16位程序及16、32位 ;混合编程的程序,所以在32位程序中习惯上加上这个;这里定义了一个宏,以模拟enter指令,nasm似乎没有这个指令%if...原创 2019-12-14 21:20:22 · 774 阅读 · 0 评论 -
GCC NASM 混合编程, 这一次有点实用性, 借用程序堆栈实现了数制ascii转换
GCC NASM 混合编程, 这一次大概有点实用性了, 是借用程序堆栈实现了数制ascii转换,当然负数的部分没写,留个思考额余地吧;testnasm.asmglobal _bin2ascii, _mystackextern _s[BITS 32]section .data_tab: db '0123456789abcdef', 0section .text _bi...原创 2019-11-22 22:27:18 · 225 阅读 · 0 评论 -
保护模式,稍作改动,去除了0x10000
仅仅是把描述符的基地址改成了0x10000,之后的每个全局符号后就都省去了它,真的是非常的简单易行。;kernel.asmbits 32kernel_start: mov ax, 2 * 8 mov ds, ax lgdt [gdtr + 0x10000] mov ax, 2 * 8 mov ds, ax mov es, ax mov ss, ax mov fs, ...原创 2019-11-18 16:59:50 · 127 阅读 · 0 评论 -
仍然是汇编和C混合编程的例子,这次用了gcc 和 NASM
仍然是汇编和C混合编程的例子,这次用了gcc 和 NASM之所以选择gcc和NASM,主要目的是在开发操作系统的时候,经常要用到几种不同的汇编和C语言的编译器,而NASM和GCC都是开源的,而且也配合的非常好,同时又是INTEL格式的汇编,相信会很合大家的胃口。global __strlen, _str, _printextern _ss, _printf_str: db 'G...原创 2019-11-18 11:46:22 · 448 阅读 · 0 评论 -
gcc和as混合编程,这个例子应该比原来的强了一点,哈哈,习惯了自吹自擂!
.extern _printf, __strlen.global _print, _a, _b, _add, _str, _str1, _print_str_len_a: .int 200_b: .int 300_str: .string "Hello, World!\n"_str1: .string "\n%d\n"_print: #void print(const...原创 2019-11-14 10:52:38 · 186 阅读 · 0 评论 -
操作系统开发,自己编码实现打印函数
#include <stdio.h>char str[0xff];void str_cpy(const char* s, char* d) { while(*s) *d++ = *s++; *d = '\0'; return;}int str_len(const char* s) { int len = 0; while(*s++) len++...原创 2019-04-24 11:17:51 · 206 阅读 · 0 评论 -
究竟C中的函数调用时怎么回事呢?我们很像知道,因此做了下面的实验。
这一次比之前的弄得明白一点了,希望不会误导大家!#include <stdio.h>void ff(char* s) {printf("%s", s);}void main(void){ void fff(char* s) {printf("%s", s);} ff("Hello, C language!\n"); fff("Hello, World!\n"); ...原创 2019-04-28 21:46:43 · 255 阅读 · 0 评论 -
希望能深入一点了解C语言中的位操作
#include <iostream>using namespace std;// bit from 0 to 31:int mymain(int i, int bit);int main(void) { int i; cout << "Please input a number:"; cin >> i; for(int j = 0; j...原创 2019-04-19 21:18:06 · 141 阅读 · 0 评论 -
C++继承 多态 虚函数 晚捆绑 的一个练习
//: C0:test300.cpp// C++ exercise:#include <iostream>using namespace std;namespace mysystem { class Object{ public: Object() { cout << "This Object Construction!\n"; } st...原创 2019-04-19 22:36:02 · 143 阅读 · 0 评论 -
继续扩展myprint的功能为操作系统开发加油!
这段代码虽然不免抄袭大侠们的嫌疑,但是完全是自己重新写过的,没有知识产权的纠纷了,而且更容易看懂,今天真是收获不小。#include <stdio.h>char str[0xff];void str_cpy(const char* s, char* d) { while(*s) *d++ = *s++; *d = '\0'; return;}int ...原创 2019-04-24 20:35:18 · 259 阅读 · 0 评论 -
难道我们始终都在做有意义的事情吗?深入C的乐趣!
#include <stdio.h>void myf(void){ printf("I am myf()\n");}int main(void){ int a = 100; int d = 0; int b = 3; int res; asm("divl %4;" "jmp 1f;" "1:jmp 1f;" "1:" :"=a"(res),"=d...原创 2019-04-30 22:33:25 · 164 阅读 · 0 评论 -
SnailOS printf 和屏显函数重写
//在打印函数中,字符串常量定义为(强制类型转换)无符号常字符指针似乎是必须的//但不知道原理为何!//在变量转化为字符串的函数中,如果/为奇数个就很可能会出现显示乱码的问题。//看来是个棘手的问题,还是等到将来再解决吧!//drawfont()如果在指定了行号的情况下,是否能够对全部的东西正常显示,我还//是没有把握,不过基本正常了,倒是这个程序调试了很长时间。extern...原创 2019-05-06 20:12:47 · 186 阅读 · 0 评论 -
SnailOS 的显存地址是怎么计算出来的?
在SnailOS 屏幕显示的函数中,我们明显的使用显存地址0xe0000000,然而这个值是从哪里来的呢?说起来还真是挺曲折的,不过为了让大家也不糊涂,我还要在这次啰嗦一些。(以前的文章应该已经说过它的由来,不过时间已久,我们就不得不再提起,不然就忘得差不多了)。1、保护模式的图形模式的由来。我们保护模式的图形模式,说起来是由grub给我们直接构建来的,只要我们的引导启动文件符合grub的...原创 2019-05-21 22:48:26 · 274 阅读 · 0 评论 -
好久没有发文了,自己用C语言编写了一个计算器程序。
对了这个就是幼稚园小朋友写的东西了,同是也是写给小朋友的玩具程序。#include <stdio.h>#include <stdlib.h>#include <conio.h>#define YES 1#define NO 0typedef int Status;int add(int a, int b);int dec(int a,...原创 2019-07-24 20:42:58 · 581 阅读 · 0 评论 -
真的理解C中的可变参数了吗?
#include <stdio.h>struct mystruct { struct mystruct* next;};void f(int a, char c, char* s, struct mystruct* b, ...){ void** varg = (void*)&b; varg++; while(*s){ if(*s != '%')...原创 2019-05-03 23:09:32 · 103 阅读 · 0 评论 -
C语言复杂中再加入复杂,这次尝试着解释了一下,不知道编译器是怎么理解的。
#include <stdio.h>int main(void) { #define N 3 #define max(a, b) ((a) > (b)?(a):(b)) #define __NR_hello 0x81 #define __NR_world 0x82 #define f(type, name) \ type name(void) { \ pri...原创 2019-04-28 09:38:12 · 120 阅读 · 0 评论 -
搞得无意义的如此复杂,只为深度C语言
#include <stdio.h>int main(void) { #define N 3 #define max(a, b) ((a) > (b)?(a):(b)) #define __NR_hello 0x81 #define __NR_world 0x82 #define f(type, name) \ type name(void) { \...原创 2019-04-28 09:03:39 · 136 阅读 · 0 评论 -
c++ 与 汇编 举例
百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCwc++ 与 汇编 举例汇编代码:#delay.s.globl _delay, _printinfo.extern _printf, _count.datastr: .string "Nop count is %x\n".text_delay: # int de...原创 2018-07-06 16:22:46 · 339 阅读 · 0 评论 -
保护模式下实现图形模式的系统(下载很多都不知是哪位大侠提供,真的抱歉!)
百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw这是下载链接了,自己没有研究透,不知是怎么实现的,还没时间移植到自己的开发平台上https://pan.baidu.com/s/1562gaHkgBFjVdQ7bgqF6vw...原创 2018-07-06 16:40:54 · 452 阅读 · 0 评论 -
不知道这样算不算保护模式下的图形模式
百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw好了先是晒图吧 这里只晒代码了,编译方法和环境搭建过程还是请参考我之前的文章好了,不过觉得自己还真的是切换到了图形模式,只是不懂得怎样调色,还请高手回复帮忙吧(有很多的代码是没有用到的,只是懒得删除罢了!kernel.c就只是从https://www.gnu.org/...原创 2018-08-04 09:36:29 · 319 阅读 · 0 评论 -
保护模式 framebuffer 图形模式 是不是有些样子了
百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw只是在屏幕上画了些矩形,也没有写成函数,下面是画矩形的代码:// Paint desktopfor (i = 0 * 3; i < 256 * 3; i++) { multiboot_uint32_t *pixel = fb + tagfb-...原创 2018-08-04 17:33:11 · 226 阅读 · 0 评论 -
Win下操作系统快捷开发环境的搭建 0.01 (操作系统 Windows virtualbox grub diskpart 开发环境搭建)
百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw开发平台搭建过程注:忽略了mingw(gcc win 的一种)的安装,这可能会对初学的朋友们造成困难,不过好在网上有许多好的gcc安装的文章,特别的一定把环境变量设置好才能用。第一部分,安装grub2 我的平台是Microsoft Windows [版本 6.1....原创 2018-07-27 18:47:09 · 394 阅读 · 0 评论 -
天书一般的gcc嵌入汇编(内联汇编),似乎没有选择,硬着脑瓜皮学下去吧!
运行结果:(参考书籍《LInux内核完全注释》,赵炯编著)百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw仿照手中自己编写的代码:#include <stdio.h>#define mystrcpy(dest, source) \({ \register char *mydest __asm...原创 2018-11-13 21:59:57 · 457 阅读 · 0 评论 -
过年也学习,看汇编、C、C++都怎么玩!
这里面最容易迷惑的可能要算void _Z6my_funv(void);函数了,看到下面的命令后,相信就没什么问题了。百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw//test87.c#include <stdio.h>void chstr(void);void _Z6my_funv(void)...原创 2019-02-05 22:45:26 · 125 阅读 · 0 评论 -
最近感觉自己C的功底真的很挖,所以还真的从头学了,居然遇到一个幼稚园的问题就想了半天,过程挺悲催的,闲得无聊也晒一下吧
问题:求类似 3 + 33 + 333 + 3333 + ...(怎么样够幼稚吧!) 上图书中的代码,是正确的解法吗,我好像没有调试出来,真的不知所措。感叹“尽信书不如无书”。书上原本是有一种方法的,但是做觉得不是很明白,也许是推得的现成公式吧,显得很抽象,因此自己想了第一种方法,自我感觉比书上的好理解。(不想抄书上的方法,也似乎是看不懂那种方法)// 3 + 33 + 333 ...原创 2019-02-25 20:48:30 · 221 阅读 · 0 评论 -
上幼儿班没够,还想蹲班,幼稚的问题发发发!
// () - () = 1// () - () = 2// () + () = 7// () + () = 9// () = 1, 2, 3, 4, 5, 6, 7, 8//试图解决上面的问题,但是没有好的算法只好自己编了一个,这个算法真的能行吗?//好幼稚的想法,好糟糕的算法,好讨厌的脑筋急转弯——网上查了一下居然是这样。// () = 1, 2, 3, 4, 5, 7, 8,...原创 2019-03-03 00:39:25 · 163 阅读 · 0 评论 -
字符串竟然这么有意思,弄来玩玩,这的很过瘾。
一次仅仅能删除一个字符,于是多次的调用就得到自己想要的字符串。#include <stdio.h>int str_size(char* const str) { char* tmp = str; int len = 0; while(*tmp++) len++; return len;}char* del_ch(char* source, char c...原创 2019-04-06 23:02:46 · 170 阅读 · 0 评论 -
字符串按长度排序C语言版,看起来不那么糟糕!
#include <stdio.h>void print_str_array(char** str_array){ while(*str_array) printf("%s\t", *str_array++); printf("\n");}void str_copy(char** s_d, char ** s_s){ while(*s_s){ *s_d++ =...原创 2019-04-12 08:57:31 · 660 阅读 · 0 评论 -
字符串排序C版,继续玩吗?
与之前的相比可能更好一点,当然也可能更糟糕,希望不会误导观众。#include <stdio.h>void print_str_array(char** str_array){ while(*str_array) printf("%s\t", *str_array++); printf("\n");}void str_copy(char** s_d, char...原创 2019-04-12 17:39:16 · 91 阅读 · 0 评论 -
无意中又喜获一本好书——《操作系统真相还原》——郑钢 著
盗版还真是无处不在呀!电子版的PDF封面也都有了。不过为了能够躺着看,我还是买了一本正版的。拿到手上也只是烦了几页,最近其实是在学习C、C++等语言,实在的说,没有时间和经历看这些厚厚的操作系统书的。不过只要一看到这类书就情不自禁地想买,真是狗改不了吃屎的感觉,哎,我什么时候才能理性和矜持一点呀!!!!...原创 2019-05-01 22:32:35 · 896 阅读 · 0 评论 -
管窥:博大精深的C指针,你都理解了吗?反正我是特么难得明白!当然也是真的糊涂!
这里没有一行注释,参考书目为C++编程思想第一卷第三章函数指针一节。我想:有没有注释都是一种骂街的感觉,也不知道发明编译原理的人的大脑都是什么样的,如此复杂的东西是怎么想出来的。#include <stdio.h>int main(void){ void (*(*f)(int, char, long))(int); int* (*(*(*f1)(int, cha...原创 2019-04-28 00:20:08 · 144 阅读 · 0 评论 -
闲得无聊,试用gcc编写winapi简单例子(编译成功)
推荐自己的笔记!!!!!!!!!!!!!百度网盘下载地址:https://pan.baidu.com/s/1_-IznMWL3z1CROziiD6mCw代码:#include <stdio.h>#include <windows.h>int WINAPI WinMain (HINSTANCE h, HINSTANCE hh, PTSTR p, int a...原创 2018-07-06 10:55:23 · 1033 阅读 · 0 评论