The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: Paul Riley <paul@rileyriot.com>
To: tuhs <tuhs@minnie.tuhs.org>
Subject: [TUHS] Using printf from Assembly Language in V6, and db.
Date: Mon, 28 Jun 2021 12:34:58 +1000	[thread overview]
Message-ID: <CAD05_j0NUPk70gbMEgXM7bNJfVkALKxHBbT87d+K=T3DxbF_1Q@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 1918 bytes --]

Hi,

I want to use printf from an assembly language program, in V6. It seems
that the Unix Programmer's Manual doesn't show how to use it from assembly,
so I wrote a short C program and captured the assembler output, for some
clues. Listings below.

In my example, the substitutional arguments for printf are pushed onto the
stack in reverse order, then the address of the string, and then printf is
called. After this, 6 is added to the stack pointer. I assume that the
printf routine pops the address of the string off the stack, but leaves the
other values on the stack, hence the need to add 2x3=6 to the stack after
calling printf in my example.

What troubles me is that the stack pointer is not decremented before the
first mov, in the example below. Is this some C convention? I would assume
that the first push in my example would overwrite the top of the stack.
Perhaps I'm not used to PDP-11 stack conventions.

I understand db only works on files like a.out or core dumps. If I wanted
to break the assembly language program to examine values, how can I force a
termination and core dump elegantly, so I can examine some register values?

Paul


*Paul Riley*

Email: paul@rileyriot.com

int a, b, c;
int main(){
  printf("printf: start\n");
  a = 1;
  b = 2;
  c = 3;
  printf("A = %d, B = %d, C = %d", a, b, c);
  printf("printf: end\n");

}

.comm   _a,2
.comm   _b,2
.comm   _c,2
.globl  _main
.text
_main:
~~main:
jsr     r5,csv
jbr     L1
L2:mov  $L4,(sp)
jsr     pc,*$_printf
mov     $1,_a
mov     $2,_b
mov     $3,_c
mov     _c,(sp)
mov     _b,-(sp)
mov     _a,-(sp)
mov     $L5,-(sp)
jsr     pc,*$_printf
add     $6,sp
mov     $L6,(sp)
jsr     pc,*$_printf
L3:jmp  cret
L1:jbr  L2
.globl
.data
L4:.byte 160,162,151,156,164,146,72,40,163,164,141,162,164,12,0
L5:.byte
101,40,75,40,45,144,54,40,102,40,75,40,45,144,54,40,103,40,75,40,45,144,0
L6:.byte 160,162,151,156,164,146,72,40,145,156,144,12,0
#

[-- Attachment #2: Type: text/html, Size: 2670 bytes --]

             reply	other threads:[~2021-06-28  2:36 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-28  2:34 Paul Riley [this message]
2021-06-28  3:27 ` Paul Riley
2021-06-28  4:48 Noel Chiappa
2021-06-28 11:27 ` Paul Riley
2021-06-28 13:48   ` Clem Cole
2021-06-28 20:37 Noel Chiappa
2021-06-29 12:18 ` Paul Riley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAD05_j0NUPk70gbMEgXM7bNJfVkALKxHBbT87d+K=T3DxbF_1Q@mail.gmail.com' \
    --to=paul@rileyriot.com \
    --cc=tuhs@minnie.tuhs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).