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运行于该模式下. 保护模式:在该模式下,机器可 ...
随机推荐
- 使用metaweblog API实现通用博客发布 之 版本控制
使用metaweblog API实现通用博客发布 之 版本控制 接上一篇本地图片自动上传以及替换路径,继续解决使用API发布博客的版本控制问题. 当本地文档修订更新以后,如何发现版本更新,并自动发布到 ...
- Shell系列(11)- 位置参数变量(4)
作用 往shell脚本里面传递参数 位置参数变量 作用 $n n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10} $* 这个变量代表命令行中 ...
- 自制Chrome扩展插件:用于重定向js
前言 作为一个前端开发, 在调试生产环境的代码时,是否苦于生产环境代码被压缩,没有sourcemap? 有没有想过将生产环境的js直接重定向为本地开发环境的js? 玩微前端时,有没有想过用本地的子应用 ...
- JMeter脚本开发
什么是jmeter脚本 用户操作系统的动作流程 用户操作系统的请求 类似演戏的剧本 怎么快速开发漂亮的jmeter脚本 准确 快速 漂亮,脚本逻辑清晰,维护性高 脚本开发方案 代理 http代理服务器 ...
- django forms的常用命令及方法(二)
根据别人网上发布,个人爱好收集 1.创建Form类 from django.forms import Form from django.forms import widgets from django ...
- P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】
正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 \(r*c\)的网格上有\(n\)个标记点,然后求有多少个矩形包含至少一个标记点. \(1\le ...
- FastAPI(62)- FastAPI 部署在 Docker
Docker 学习 https://www.cnblogs.com/poloyy/p/15257059.html 项目结构 . ├── app │ ├── __init__.py │ └── ma ...
- 面试官:为什么需要Java内存模型?
面试官:今天想跟你聊聊Java内存模型,这块你了解过吗? 候选者:嗯,我简单说下我的理解吧.那我就从为什么要有Java内存模型开始讲起吧 面试官:开始你的表演吧. 候选者:那我先说下背景吧 候选者:1 ...
- Django序列化页和过滤页规范
序列化类:serializers.py from rest_framework import serializers from goods.models import Goods, GoodsCate ...
- luogu1438无聊的数列(区间加等差数列,求一个数的和)
QAQ一道线段树好题 题目大意: 给定一个有n个数的数列,共m种操作,有两种操作 \(1\ l\ r\ k\ d\)表示将\(a[l]\)~\(a[r]\)的数加一个以k为首相,d为公差 \(2\ x ...