質問編集履歴

4

追記

2017/07/11 04:52

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -327,3 +327,191 @@
327
327
  call命令の際のレジスタについているアスタリスクはなんのために付いているのでしょうか?
328
328
 
329
329
  こちらの方が分かりやすいですね。
330
+
331
+
332
+
333
+ [追記2]
334
+
335
+ 最適化-O2でやったコードを載せます。
336
+
337
+
338
+
339
+ ```ここに言語を入力
340
+
341
+ .file "pointer_arg.c"
342
+
343
+ .text
344
+
345
+ .p2align 4,,15
346
+
347
+ .globl test
348
+
349
+ .type test, @function
350
+
351
+ test:
352
+
353
+ .LFB15:
354
+
355
+ .cfi_startproc
356
+
357
+ pushq %r13
358
+
359
+ .cfi_def_cfa_offset 16
360
+
361
+ .cfi_offset 13, -16
362
+
363
+ pushq %r12
364
+
365
+ .cfi_def_cfa_offset 24
366
+
367
+ .cfi_offset 12, -24
368
+
369
+ movq %rdi, %r13
370
+
371
+ pushq %rbp
372
+
373
+ .cfi_def_cfa_offset 32
374
+
375
+ .cfi_offset 6, -32
376
+
377
+ pushq %rbx
378
+
379
+ .cfi_def_cfa_offset 40
380
+
381
+ .cfi_offset 3, -40
382
+
383
+ subq $8, %rsp
384
+
385
+ .cfi_def_cfa_offset 48
386
+
387
+ movsbq (%rdi), %rbx
388
+
389
+ testb %bl, %bl
390
+
391
+ je .L10
392
+
393
+ call __ctype_b_loc@PLT
394
+
395
+ movq %r13, %rbp
396
+
397
+ movq %rax, %r12
398
+
399
+ .p2align 4,,10
400
+
401
+ .p2align 3
402
+
403
+ .L4:
404
+
405
+ movq (%r12), %rax
406
+
407
+ testb $2, 1(%rax,%rbx,2)
408
+
409
+ je .L3
410
+
411
+ call __ctype_toupper_loc@PLT
412
+
413
+ movq (%rax), %rax
414
+
415
+ movl (%rax,%rbx,4), %eax
416
+
417
+ movb %al, 0(%rbp)
418
+
419
+ .L3:
420
+
421
+ addq $1, %rbp
422
+
423
+ movsbq 0(%rbp), %rbx
424
+
425
+ testb %bl, %bl
426
+
427
+ jne .L4
428
+
429
+ .L10:
430
+
431
+ addq $8, %rsp
432
+
433
+ .cfi_def_cfa_offset 40
434
+
435
+ movq %r13, %rax
436
+
437
+ popq %rbx
438
+
439
+ .cfi_def_cfa_offset 32
440
+
441
+ popq %rbp
442
+
443
+ .cfi_def_cfa_offset 24
444
+
445
+ popq %r12
446
+
447
+ .cfi_def_cfa_offset 16
448
+
449
+ popq %r13
450
+
451
+ .cfi_def_cfa_offset 8
452
+
453
+ ret
454
+
455
+ .cfi_endproc
456
+
457
+ .LFE15:
458
+
459
+ .size test, .-test
460
+
461
+ .section .text.startup,"ax",@progbits
462
+
463
+ .p2align 4,,15
464
+
465
+ .globl main
466
+
467
+ .type main, @function
468
+
469
+ main:
470
+
471
+ .LFB16:
472
+
473
+ .cfi_startproc
474
+
475
+ subq $40, %rsp
476
+
477
+ .cfi_def_cfa_offset 48
478
+
479
+ movabsq $7812735413947559801, %rax
480
+
481
+ movq %rax, (%rsp)
482
+
483
+ movabsq $7308533390257515808, %rax
484
+
485
+ movq %rsp, %rdi
486
+
487
+ movq %rax, 8(%rsp)
488
+
489
+ movabsq $2948273595836448, %rax
490
+
491
+ movq %rax, 16(%rsp)
492
+
493
+ call test
494
+
495
+ movq %rax, %rdi
496
+
497
+ call puts@PLT
498
+
499
+ xorl %eax, %eax
500
+
501
+ addq $40, %rsp
502
+
503
+ .cfi_def_cfa_offset 8
504
+
505
+ ret
506
+
507
+ .cfi_endproc
508
+
509
+ .LFE16:
510
+
511
+ .size main, .-main
512
+
513
+ .ident "GCC: (Debian 6.3.0-18) 6.3.0 20170516"
514
+
515
+ .section .note.GNU-stack,"",@progbits
516
+
517
+ ```

3

追記

2017/07/11 04:52

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  ```
54
54
 
55
- アセルしたものを書きます。
55
+ パイルしたものを書きます。
56
56
 
57
57
  ```
58
58
 

2

追記

2017/07/11 00:57

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -290,6 +290,8 @@
290
290
 
291
291
  わざわざカッコを付けている理由はなんでしょうか?
292
292
 
293
+ () ・・・括弧内のレジスタにアドレスが入っていたら、()はC言語で言う所の間接演算子(*)と同じ効果という理解で正しいでしょうか?
294
+
293
295
  この行はなぜ必要なんですか?
294
296
 
295
297
 

1

追記

2017/07/10 11:53

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -305,3 +305,23 @@
305
305
  どなたか教えてください。
306
306
 
307
307
  Linux 64bit Debianです。
308
+
309
+
310
+
311
+ [追記]
312
+
313
+ 私の本のなかでは、islower()の呼び出しは以下のようになっています。
314
+
315
+ movl -12(%rbp), %eax
316
+
317
+ movl %eax, %ecx
318
+
319
+ movq __imp_islower(%rip), %rax
320
+
321
+ call *(%rax)
322
+
323
+
324
+
325
+ call命令の際のレジスタについているアスタリスクはなんのために付いているのでしょうか?
326
+
327
+ こちらの方が分かりやすいですね。