teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/02/10 02:17

投稿

cateye
cateye

スコア6851

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

エラー追記

2020/02/10 02:17

投稿

cateye
cateye

スコア6851

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
+ ```