回答編集履歴
2
追記
answer
CHANGED
@@ -19,7 +19,7 @@
|
|
19
19
|
movl $0, -4(%rbp)
|
20
20
|
movq %rax, -16(%rbp)
|
21
21
|
movq -16(%rbp), %rax
|
22
|
-
movzbl (%rax), %esi
|
22
|
+
movzbl (%rax), %esi # byteをintに変換
|
23
23
|
movb $0, %al
|
24
24
|
callq printf
|
25
25
|
xorl %esi, %esi
|
1
エラー追記
answer
CHANGED
@@ -1,4 +1,46 @@
|
|
1
1
|
> unsigned char型にキャストした値は、なぜint型になっているのでしょうか?
|
2
2
|
|
3
3
|
以下を参考に。
|
4
|
-
[整数変換のルールを理解する](https://www.jpcert.or.jp/sc-rules/c-int02-c.html)
|
4
|
+
[整数変換のルールを理解する](https://www.jpcert.or.jp/sc-rules/c-int02-c.html)
|
5
|
+
|
6
|
+
「追記」
|
7
|
+
```asm
|
8
|
+
main: # @main
|
9
|
+
.cfi_startproc
|
10
|
+
# %bb.0:
|
11
|
+
pushq %rbp
|
12
|
+
.cfi_def_cfa_offset 16
|
13
|
+
.cfi_offset %rbp, -16
|
14
|
+
movq %rsp, %rbp
|
15
|
+
.cfi_def_cfa_register %rbp
|
16
|
+
subq $32, %rsp
|
17
|
+
movabsq $.L.str.1, %rdi
|
18
|
+
movabsq $.L.str, %rax
|
19
|
+
movl $0, -4(%rbp)
|
20
|
+
movq %rax, -16(%rbp)
|
21
|
+
movq -16(%rbp), %rax
|
22
|
+
movzbl (%rax), %esi
|
23
|
+
movb $0, %al
|
24
|
+
callq printf
|
25
|
+
xorl %esi, %esi
|
26
|
+
movl %eax, -20(%rbp) # 4-byte Spill
|
27
|
+
movl %esi, %eax
|
28
|
+
addq $32, %rsp
|
29
|
+
popq %rbp
|
30
|
+
retq
|
31
|
+
.Lfunc_end0:
|
32
|
+
.size main, .Lfunc_end0-main
|
33
|
+
.cfi_endproc
|
34
|
+
# -- End function
|
35
|
+
.type .L.str,@object # @.str
|
36
|
+
.section .rodata.str1.1,"aMS",@progbits,1
|
37
|
+
.L.str:
|
38
|
+
.asciz "abc"
|
39
|
+
.size .L.str, 4
|
40
|
+
|
41
|
+
.type .L.str.1,@object # @.str.1
|
42
|
+
.L.str.1:
|
43
|
+
.asciz "%d\n"
|
44
|
+
.size .L.str.1, 4
|
45
|
+
|
46
|
+
```
|