//----------------------------------------------------------------- // linkdemo.s // // This program shows how an application in assembly language // can call an 'external' subroutine (defined in a separately // assembled file, then 'linked' to this application's code). // // assemble using: $ as linkdemo.s -o linkdemo.o // then link with: $ ld linkdemo.o dumpregs.o -o linkdemo // // programmer: ALLAN CRUSE // written on: 13 FEB 2008 //----------------------------------------------------------------- .equ sys_exit, 1 # system-call ID-number .equ sys_write, 4 # system-call ID-number .equ dev_stdout, 1 # device-file ID-number .section .data msg: .ascii "\nCurrent values in CPU registers: \n" len: .int . - msg .section .text _start: # show our title message mov $sys_write, %eax mov $dev_stdout, %ebx mov $msg, %ecx mov len, %edx int $0x80 # setup some easy-to-recognize values in CPU registers mov $0xAAAAAAAA, %eax mov $0xBBBBBBBB, %ebx mov $0xCCCCCCCC, %ecx mov $0xDDDDDDDD, %edx mov $0x01234567, %esi mov $0x89ABCDEF, %edi # now call our external 'dumpregs' procedure call dumpregs # now terminate this application mov $sys_exit, %eax mov $0, %ebx int $0x80 .global _start .end