Skip to content

Commit

Permalink
Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码
Browse files Browse the repository at this point in the history
  • Loading branch information
CYRUS-STUDIO committed Nov 3, 2024
1 parent e53a810 commit 1dc90d1
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
+++
title = 'Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码'
date = 2024-11-04T02:29:37.450311+08:00
date = 2024-11-04T02:39:15.327917+08:00
draft = false
+++

Expand Down Expand Up @@ -107,7 +107,9 @@ int main() {
```

执行下面命令把 hello_thumb.c 编译成 thumb 汇编代码文件 hello_thumb.s
```
armv7a-linux-androideabi35-clang -S -mthumb hello_thumb.c -o hello_thumb.s
```
-mthumb 表示使用 thumb 汇编

关于ARM程序生成过程可以参考这篇文章【[详解ARM64可执行程序的生成过程](https://cyrus-studio.github.io/blog/posts/%E8%AF%A6%E8%A7%A3arm64%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%94%9F%E6%88%90%E8%BF%87%E7%A8%8B/)】
Expand Down Expand Up @@ -184,7 +186,9 @@ main:
```

执行下面命令把 thumb 汇编文件编译成可执行程序 hello_thumb。
```
armv7a-linux-androideabi35-clang hello_thumb.s -o hello_thumb
```

把 hello_thumb 推送到 android 设备并执行
```
Expand Down
4 changes: 2 additions & 2 deletions public/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
<description>Recent content on CYRUS STUDIO</description>
<generator>Hugo</generator>
<language>zh-cn</language>
<lastBuildDate>Mon, 04 Nov 2024 02:29:37 +0800</lastBuildDate>
<lastBuildDate>Mon, 04 Nov 2024 02:39:15 +0800</lastBuildDate>
<atom:link href="https://cyrus-studio.github.io/blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码</title>
<link>https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/</link>
<pubDate>Mon, 04 Nov 2024 02:29:37 +0800</pubDate>
<pubDate>Mon, 04 Nov 2024 02:39:15 +0800</pubDate>
<guid>https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/</guid>
<description>版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/&#xA;Thumb指令集 ARM 指令集:最早在 1985 年随第一代 ARM 处理器问世。ARM 指令集一开始是 32 位固定长度的指令,用于各种计算任务。&#xA;Thumb 指令集:在 1994 年的 ARM7TDMI 处理器中首次引入。这是在 ARM 指令集基础上开发的一个 16 位指令集,旨在优化嵌入式系统中代码密度和内存效率。&#xA;寄存器 Thumb 跟 ARM 是一样的。&#xA;随着 ARM 架构的演进,后来加入了 32 位的 Thumb 指令,称为 Thumb-2 指令集。&#xA;以简单的加载立即数到寄存器为例,解释一下 16 位和 32 位的 Thumb 指令的区别&#xA;16 位 Thumb 指令&#xA;MOVS R0, #1 // 将立即数 1 加载到 R0,指令长度为 16 位 32 位 Thumb 指令&#xA;MOV.W R0, #65535 // 将较大的立即数 65535 加载到 R0,指令长度为 32 位 由于 16 位 Thumb 指令长度有限,无法直接处理大立即数,而 32 位 Thumb 指令支持更大的立即数范围。32 位指令格式可以容纳更多位的立即数、更复杂的操作码。</description>
</item>
Expand Down
4 changes: 2 additions & 2 deletions public/posts/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
<description>Recent content in Posts on CYRUS STUDIO</description>
<generator>Hugo</generator>
<language>zh-cn</language>
<lastBuildDate>Mon, 04 Nov 2024 02:29:37 +0800</lastBuildDate>
<lastBuildDate>Mon, 04 Nov 2024 02:39:15 +0800</lastBuildDate>
<atom:link href="https://cyrus-studio.github.io/blog/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码</title>
<link>https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/</link>
<pubDate>Mon, 04 Nov 2024 02:29:37 +0800</pubDate>
<pubDate>Mon, 04 Nov 2024 02:39:15 +0800</pubDate>
<guid>https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/</guid>
<description>版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/&#xA;Thumb指令集 ARM 指令集:最早在 1985 年随第一代 ARM 处理器问世。ARM 指令集一开始是 32 位固定长度的指令,用于各种计算任务。&#xA;Thumb 指令集:在 1994 年的 ARM7TDMI 处理器中首次引入。这是在 ARM 指令集基础上开发的一个 16 位指令集,旨在优化嵌入式系统中代码密度和内存效率。&#xA;寄存器 Thumb 跟 ARM 是一样的。&#xA;随着 ARM 架构的演进,后来加入了 32 位的 Thumb 指令,称为 Thumb-2 指令集。&#xA;以简单的加载立即数到寄存器为例,解释一下 16 位和 32 位的 Thumb 指令的区别&#xA;16 位 Thumb 指令&#xA;MOVS R0, #1 // 将立即数 1 加载到 R0,指令长度为 16 位 32 位 Thumb 指令&#xA;MOV.W R0, #65535 // 将较大的立即数 65535 加载到 R0,指令长度为 32 位 由于 16 位 Thumb 指令长度有限,无法直接处理大立即数,而 32 位 Thumb 指令支持更大的立即数范围。32 位指令格式可以容纳更多位的立即数、更复杂的操作码。</description>
</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
<meta property="og:locale" content="zh_cn">
<meta property="og:type" content="article">
<meta property="article:section" content="posts">
<meta property="article:published_time" content="2024-11-04T02:29:37+08:00">
<meta property="article:modified_time" content="2024-11-04T02:29:37+08:00">
<meta property="article:published_time" content="2024-11-04T02:39:15+08:00">
<meta property="article:modified_time" content="2024-11-04T02:39:15+08:00">


</head>
Expand Down Expand Up @@ -201,9 +201,9 @@ <h1 id="__编译-thumb-汇编指令__"><strong>编译 Thumb 汇编指令</strong
printf(&#34;1 + 1 = %d\n&#34;, result);
return 0;
}
</code></pre><p>执行下面命令把 hello_thumb.c 编译成 thumb 汇编代码文件 hello_thumb.s
armv7a-linux-androideabi35-clang -S -mthumb hello_thumb.c -o hello_thumb.s
-mthumb 表示使用 thumb 汇编</p>
</code></pre><p>执行下面命令把 hello_thumb.c 编译成 thumb 汇编代码文件 hello_thumb.s</p>
<pre tabindex="0"><code>armv7a-linux-androideabi35-clang -S -mthumb hello_thumb.c -o hello_thumb.s
</code></pre><p>-mthumb 表示使用 thumb 汇编</p>
<p>关于ARM程序生成过程可以参考这篇文章【<a href="https://cyrus-studio.github.io/blog/posts/%E8%AF%A6%E8%A7%A3arm64%E5%8F%AF%E6%89%A7%E8%A1%8C%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%94%9F%E6%88%90%E8%BF%87%E7%A8%8B/">详解ARM64可执行程序的生成过程</a>】</p>
<p>打开 hello_thumb.s 可以看到,结构上和 ARM 汇编是差不多的,多了一些 thumb 标记,如:.code 16、.thumb_func 标记为 16 位 thumb,还有使用到 thumb 指令。</p>
<pre tabindex="0"><code> .text // 指令区段开始
Expand Down Expand Up @@ -273,9 +273,9 @@ <h1 id="__编译-thumb-汇编指令__"><strong>编译 Thumb 汇编指令</strong

.ident &#34;Android ... clang version ...&#34; // 编译器标识符
.section &#34;.note.GNU-stack&#34;,&#34;&#34;,%progbits // 栈保护
</code></pre><p>执行下面命令把 thumb 汇编文件编译成可执行程序 hello_thumb。
armv7a-linux-androideabi35-clang hello_thumb.s -o hello_thumb</p>
<p>把 hello_thumb 推送到 android 设备并执行</p>
</code></pre><p>执行下面命令把 thumb 汇编文件编译成可执行程序 hello_thumb。</p>
<pre tabindex="0"><code>armv7a-linux-androideabi35-clang hello_thumb.s -o hello_thumb
</code></pre><p>把 hello_thumb 推送到 android 设备并执行</p>
<pre tabindex="0"><code>adb push .\hello_thumb /data/local/tmp
adb shell chmod +x /data/local/tmp/hello_thumb
adb shell /data/local/tmp/hello_thumb
Expand Down
6 changes: 3 additions & 3 deletions public/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://cyrus-studio.github.io/blog/</loc>
<lastmod>2024-11-04T02:29:37+08:00</lastmod>
<lastmod>2024-11-04T02:39:15+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/</loc>
<lastmod>2024-11-04T02:29:37+08:00</lastmod>
<lastmod>2024-11-04T02:39:15+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/</loc>
<lastmod>2024-11-04T02:29:37+08:00</lastmod>
<lastmod>2024-11-04T02:39:15+08:00</lastmod>
</url><url>
<loc>https://cyrus-studio.github.io/blog/posts/adb-%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E6%89%8B%E5%8A%A8%E4%BF%AE%E6%94%B9-adb-%E8%B0%83%E8%AF%95%E6%8E%88%E6%9D%83%E4%BF%A1%E6%81%AF/</loc>
<lastmod>2024-11-03T04:49:00+08:00</lastmod>
Expand Down

0 comments on commit 1dc90d1

Please sign in to comment.