Win10下C语言转8086汇编
Win10下C语言转8086汇编
简介
最近学习《王爽汇编》,然后突发奇想,想一边写C语言用编译器将其翻译成汇编代码,然后对照着学习高级代码转换低级代码的过程,经过一番搜索后发现个不错的方案:DOSBOX + Turbo C。
开始
直接下网上大佬集成好的带TC版的DOSBOX,我从CSDN上下的挺坑要积分,我这里上传到百度云给各位大佬下载传送下载提取码:6ara 。

写C代码
双击启动TC2.0.exe,打开了Trubo C编写C语言代码。

选中File->New,然后写个HelloWord的代码。

接着按F10,然后继续选中File,接着选中Save,保存为HelloWorld.C

然后编译链接看看,直接按F9,编译通过没有报错,并且目录下生成了EXE。


直接ctrl+f9运行程序,并按alt+f5切换到DOS界面,就能看到HelloWorld了。

漂亮!终于用C写了个DOS版的Hello,World 之前都是用汇编写的。
转换成汇编代码
先切换到DOS的shell。

然后执行如下命令tcc -S -ml -I./include -L./lib HelloWorld.c

成功后多出一个HelloWorld.asm文件,汇编代码如下。
ifndef ??version
?debug macro
endm
endif
?debug S "hellowor.c"
HELLOWOR_TEXT segment byte public 'CODE'
DGROUP group _DATA,_BSS
assume cs:HELLOWOR_TEXT,ds:DGROUP
HELLOWOR_TEXT ends
_DATA segment word public 'DATA'
d@ label byte
d@w label word
_DATA ends
_BSS segment word public 'BSS'
b@ label byte
b@w label word
?debug C E99A8D2D530A68656C6C6F776F722E63
?debug C E937892D53112E2F696E636C7564655C737464696F2E68
?debug C E900501D11122E2F696E636C7564655C7374646172672E68
_BSS ends
HELLOWOR_TEXT segment byte public 'CODE'
; ?debug L 2
_main proc far
; ?debug L 4
push ds
mov ax,offset DGROUP:s@
push ax
call far ptr _printf
pop cx
pop cx
; ?debug L 5
xor ax,ax
jmp short @1
@1:
; ?debug L 6
ret
_main endp
HELLOWOR_TEXT ends
?debug C E9
_DATA segment word public 'DATA'
s@ label byte
db 72
db 101
db 108
db 108
db 111
db 44
db 87
db 111
db 114
db 108
db 100
db 33
db 13
db 10
db 0
_DATA ends
extrn _printf:far
HELLOWOR_TEXT segment byte public 'CODE'
HELLOWOR_TEXT ends
public _main
end
Win10下C语言转8086汇编的更多相关文章
- 【8086汇编-Day1】预备知识
菜鸟的8086汇编入门之旅,偶有错处恭请大佬们指正. Ⅰ· 闲说一下 我为什么学汇编?相对于晦涩难懂的01010101011010机器语言(高低电平变化驱动机器做出不同反应),汇编语言用更便于记忆和使 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
- win10下安装ubuntu18.04
在win10下安装Ubuntu18.04,双系统共存.Ubuntu 18.04 使用的是Gnome桌面. 查看系统的启动模式: Win+R打开运行,输入msinfo32,回车查看系统信息.在BIOS模 ...
- Linux下C语言编程基础学习记录
VIM的基本使用 LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s ...
- 在c语言中嵌入汇编语句,对于我来说相当难。
今天早上在csdn论坛上看到一个帖子http://topic.csdn.net/u/20120917/14/82f42e17-977a-4824-95bd-7b79db15d283.html:“C语言 ...
- 20155322 2017-2018-1《信息安全系统设计》第二周 课堂测试 Linux下C语言实现MYOD
20155322 2017-2018-1<信息安全系统设计>第二周 课堂测试 Linux下C语言实现MYOD [博客目录] 静态库测试 实现方法 相关资料 操作 动态库测试 实现方法 相关 ...
- Win10下安装zookeeper
Win10下安装zookeeper 注册中心zookeeper的安装 0.去Apache官网下载zookeeper http://zookeeper.apache.org/ 2.找到解压路径的conf ...
- 8086汇编——Introduction(8086内部寄存器,段寄存器,存储器分段)
8086汇编--Introduction 一.8086CPU的三种工作模式 实模式:只有低20位地址线起作用,仅能寻址第一个1MB的内存空间.MS DOS运行于该模式下. 保护模式:在该模式下,机器可 ...
随机推荐
- leetcode 盛水最多的容器 解析
采用双指针法: 主要思想:定义头尾两个指针,分别向中间遍历,当相遇时结束循环.存储每一次遍历容器盛水的最大容量,并不断更新. 盛水的最大容量为 左右指针高度的最小值 乘以 左右指针的距离即宽度. 则可 ...
- Java基础系列(28)- 方法的定义和调用
方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 修饰符 返回值类型 方法名(参数类型 参数名){ -- 方法体 -- retu ...
- Linux系列(23) - echo
作用:打印 格式:echo [选项] [输出内容] 选项:-e :支持反斜线控制的字符转换 前置条件:必须加选项-e才能使用 控制字符 作用 \a 输出警告音 \b 退格符,也就是向左删除键 \n 换 ...
- div居中和垂直居中的最简单方法
div居中方法: 1)对父盒子添加 text-align="center": 2)子盒子添加 margin:0 auto; 例子: body{text-align:center} ...
- javascript 实现php str_pad
* 查看php.net官方手册 string str_pad ( string $input , int $pad_length [, string $pad_string = " &quo ...
- Jmeter监控技术实战
性能测试中监控的意义 为性能分析提供依据 监控方案 serverAgent jmeter的插件,监控颗粒度不高,界面简陋 服务器中启动 jmeter中添加插件 Nmon Grafana 优秀监控方案所 ...
- turtle color设置的几种方式
t.colormode() 查看色彩模式,缺省1.0,即RGB范围在0-1 模式切换:参数填1.0或255 t.colormode(1.0) t.colormode(255) 设置颜色,以设置penc ...
- 使用gitlab runner进行CI(三):使用sonarqube做c++的静态检查
目录 1. gitlab-ci.yml的配置 1.1 几个基本概念 1.2 使用CI进行代码检查demo 2. Sonarqube安装和配置 2.1 Sonarqube安装 2.2 数据库配置 2.3 ...
- 题解 Yet Another Number Sequence
题目传送门 Description 给出 \(n,k\) ,求出: \[\sum_{i=1}^{n} f_i·i^k \] 其中 \(f_i\) 表示斐波拉契第 \(i\) 项.\(n\le 10^{ ...
- QFNU-ACM 2021.10.09 Rating补题
A - A CodeForces - 478A 注意点: 和为0时要特判一下. 代码: #include<bits/stdc++.h> using namespace std; int m ...