- bool status = false;
-
- /* PUSH 0,GR1 */
- writememory(0x7001, (asprop->ptr)++, pass);
- writememory(0x0, (asprop->ptr)++, pass);
- /* PUSH 0,GR2 */
- writememory(0x7002, (asprop->ptr)++, pass);
- writememory(0x0, (asprop->ptr)++, pass);
- /* LAD GR1,OBUF */
- writememory(0x1210, (asprop->ptr)++, pass);
- writememory(getadr(asprop->prog, obuf, pass), (asprop->ptr)++, pass);
- /* LAD GR2,OLEN */
- writememory(0x1220, (asprop->ptr)++, pass);
- writememory(getadr(asprop->prog, len, pass), (asprop->ptr)++, pass);
- /* SVC 2 */
- writememory(0xF000, (asprop->ptr)++, pass);
- writememory(0x0002, (asprop->ptr)++, pass);
- /* LAD GR1,=#A */
- writememory(0x1210, (asprop->ptr)++, pass);
- if(pass == FIRST) {
- (asprop->ptr)++;
- } else {
- writememory(asprop->lptr, (asprop->ptr)++, pass); /* リテラルのアドレスを書込 */
- }
- writememory(0xA, (asprop->lptr)++, pass);
- /* LAD GR2,=1 */
- writememory(0x1220, (asprop->ptr)++, pass);
- if(pass == FIRST) {
- (asprop->ptr)++;
- } else {
- writememory(asprop->lptr, (asprop->ptr)++, pass); /* リテラルのアドレスを書込 */
- }
- writememory(0x1, (asprop->lptr)++, pass);
- /* SVC 2 */
- writememory(0xF000, (asprop->ptr)++, pass);
- writememory(0x0002, (asprop->ptr)++, pass);
- /* POP GR2 */
- writememory(0x7120, (asprop->ptr)++, pass);
- /* POP GR1 */
- writememory(0x7110, (asprop->ptr)++, pass);
- if(cerr->num == 0) {
- status = true;
- }
- return status;
+ char *line = malloc_chk(LINESIZE + 1, "assemble_out.line");
+ if(cmdl->opd->opdc == 0 || cmdl->opd->opdc > 2) {
+ setcerr(106, ""); /* operand count mismatch */
+ return;
+ }
+ assembleline(" PUSH 0,GR1", pass);
+ assembleline(" PUSH 0,GR2", pass);
+ sprintf(line, " LAD GR1,%s", cmdl->opd->opdv[0]);
+ assembleline(line, pass);
+ sprintf(line, " LAD GR2,%s", cmdl->opd->opdv[1]);
+ assembleline(line, pass);
+ assembleline(" SVC 2", pass);
+ assembleline(" LAD GR1,=#A", pass);
+ assembleline(" LAD GR2,=1", pass);
+ assembleline(" SVC 2", pass);
+ assembleline(" POP GR2", pass);
+ assembleline(" POP GR1", pass);
+ FREE(line);