mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 09:56:29 +00:00
60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
#include <unistd.h>
|
|
|
|
char base[] ="0123456789012345678901234567890123456789";
|
|
|
|
void
|
|
stmg_no_wrap(void)
|
|
{
|
|
char buf[24];
|
|
|
|
/* No-wrap around case; copies 24 bytes from BASE to BUF */
|
|
asm volatile( "lg 5, 0(%1)\n\t"
|
|
"lg 6, 8(%1)\n\t"
|
|
"lg 7, 16(%1)\n\t"
|
|
"stmg 5, 7, %0\n\t"
|
|
:"=m" (buf)
|
|
: "a" (base)
|
|
: "5", "6", "7");
|
|
/* Write out BUF */
|
|
asm volatile( "lghi 2, 1\n\t" // stdout
|
|
"lgr 3, %0\n\t" // buf
|
|
"lghi 4, 24\n\t" // len = 3*8 bytes
|
|
"svc 4\n\t"
|
|
: : "a" (buf)
|
|
: "2", "3", "4");
|
|
}
|
|
|
|
void
|
|
stmg_wrap(void)
|
|
{
|
|
char buf[64];
|
|
|
|
/* Wrap around case; copies 32 bytes from BASE to BUF */
|
|
asm volatile( "lg 15, 0(%1)\n\t"
|
|
"lg 0, 8(%1)\n\t"
|
|
"lg 1, 16(%1)\n\t"
|
|
"lg 2, 24(%1)\n\t"
|
|
"stmg 15, 2, %0\n\t"
|
|
:"=m" (buf)
|
|
: "a" (base)
|
|
: "15", "0", "1", "2");
|
|
/* Write out BUF */
|
|
asm volatile( "lghi 2, 1\n\t" // stdout
|
|
"lgr 3, %0\n\t" // buf
|
|
"lghi 4, 32\n\t" // len = 4*8 bytes
|
|
"svc 4\n\t"
|
|
: : "a" (buf)
|
|
: "2", "3", "4");
|
|
}
|
|
|
|
|
|
int main(void)
|
|
{
|
|
stmg_no_wrap();
|
|
write(1, "\n", 1);
|
|
stmg_wrap();
|
|
write(1, "\n", 1);
|
|
|
|
return 0;
|
|
}
|