• 締切済み

Z80のプログラム(アセンブラ)

sw0--sw7をpa0--pa7へ接続し、sw0--sw3の2進数値をX、sw4--sw7の2進数値をYとしてX+Y,X-Yを求めて、演算結果をポートCに表示するというプログラムです。ただし、減算は2の補数を使います。だれか教えてください

  • goken
  • お礼率25% (2/8)

みんなの回答

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

もともとのZ80にはポートは無いのでIO空間かメモリーマップドになっているはずです。とりあえず PortA PortC のアドレスにマップされているとして書いてみると、 ORG * LD A,PortA LD HL,BUFF LD (HL),A SRA A SRA A SRA A SRA A LD B,A RLD LD A,(HL) SRA A SRA A SRA A SRA A LD C,A ADD A,B RLD LD A,C SUB B RLD LD A,(HL) LD PortC,A END BUFF: DS 1 でいかがでしょう。出力はX+Yが上位ニブル、X-Yが下位のニブルに出力されると思います。このコードが通るかどうかはアセンブラによると思いますから適当に改変してください。

goken
質問者

お礼

ありがとうございます。これからもよろしくです

関連するQ&A

  • ビットやバイトの計算がわかりません

    何度読んでも理解できません。 (1)ビット列A=111011、ビット列B=110110、ビット列C=010011に対し、A+(B・C)の結果は何になるか? (2)ビット列A=111010、ビット列B=010110、ビット列C=011011に対し、(A+B)・Cの結果は何になるか? (3)2進数Xの1の補数は101101、2の補数はYになる。 XとYを求めよ (4)2進数Xの1の補数は1011001、2の補数はYになる。XとYを求めよ 答えよりも、解き方や考え方を詳しく教えてください。 全くわかりません。 また、これらを解くのに必要な知識、などありましたら、併せて教えてください。

  • 四則演算についてです

    四則演算の除算法についてですが {23/6}を2進数で求めたいです。 但し、被除数は6ビット、除数は4ビットという条件付き。 23=(0 10111)2 6=(0 110)2 2の補数を用いて-6=(1 010)2 減算結果が正の場合、商として1をたて 減算結果が負の場合、商として0を立てるのですが 010111 +)1010    商 --------- 111111 …0 +) 1010 --------- 1010011 …0 +) 1010 --------- 1101 …0 +) 1010 --------- 10111 となってしまい商と余りがうまく出ません! 間違ってるところ教えてください!

  • 基本的な情報の問題なんですが次の問題の解き方教えて下さい

    次の演算を、符号付き2の補数表示を用いた数に加算として行え。ただし、ビット数は演算の結果あふれが生じない範囲で、最も小さいものを用いよ。 (a)23-17 (b) 23+17 (c)-23-17 よろしくお願いします。

  • 論理回路

    この問題教えていただけませんか (1)次の減算を符号無し4ビットで補数計算をせよ。 (1) +5 -)+6   0101 +) (2) -5  -)-4 (2)次の16進数減算を補数加算せよ。 (1)4B0C -) 3A56・・・3A56の16の補数を加算

  • 次のプログラムを作りたいのですが…

    入力した1点と原点(0,0)で囲まれる長方形の面積を求めるプログラムです。 ただし、点を表す構造体を使用すること。 【結果】 ./pa-j-1.c point (x, y)? -> 10.5 21.3 area = 223.65 10.5 21.3の部分は自分で好きな数値を入力します。 よろしくお願いします。 struct point{を使うことはわかるのですが…

  • プログラム問題

    質問】 2つの実数xとyを入力し、xとyの値とx,yが格納されている領域のアドレスを表示するプログラムを作成します。 【プログラム作成例】 数 x と y を入力しなさい=> 2 3 数 x = 2.000000 x のアドレス = #0044 数 y = 3.000000 y のアドレス = #0048 上記の解答は下記の通りなのですが、下記以外の解答方法を教えてはいただけないでしょうか? C言語に詳しい方よろしくお願いいたします。 #include <stdio.h> void main(void) { float x, y; printf("数 x と y を入力しなさい=> "); scanf("%f %f", &x, &y); printf("数 x = %f x のアドレス = %p\n", x, &x); printf("数 y = %f y のアドレス = %p\n", y, &y); }

  • 基本情報技術者過去問

    1)負数を2の補数で表す8ビットの数値がある。この値を10進数で表現すると-100である。この値を符号なしの数値として解釈すると、10進数で幾らか? ア)28 イ)100 ウ)156 エ)228 2) 多くのコンピュータが、演算回路を簡単にするために補数を用いている理由はどれですか。 ア)加算を減算で処理できる イ)減算を加算で処理できる ウ)乗算を加算の組み合わせで処理できる エ)除算を減算の組み合わせで処理できる

  • PICで温度計をつくりたいのですが。アセンブラを教えてください。

    初歩的な質問でもうしわけないのですが、 PIC16F819のPICを買いまして、CMOS温度センサーにオペアンプをかけ PA1につなぎ、A/D変換 PB0~7まで7セグを並列に3つつなぎ。 PA4,6,7から各ポートにトランジスタのBにいれ、Cに+5、Eに7セグのCOMをいれ 3桁の数字を表示させたいのです。 たしか、ダイナミックスキャンというものだと思います。 とりあえず、センサーから入ってきた数値をそのまま表示させたいのですが。 ダイナミックスキャンのアセンブラのプログラムがうまくいきません。 簡単に教えていただきたいのですが。 わかる方お願いします。 ハードは問題はないと思います。

  • 簡単な割り算プログラムとprintfについて。

    趣味のプログラミングで二つの整数x, yの割り算結果x/yを分数(約分も行う)、または少数で表示するプログラムを作成中です。 分子が1になる場合は分数、それ以外は少数で表示しなくてはなりません。 しかし、 二つの整数が1, 111の場合など、割り算の結果が無限少数になってしまう場合は、 1/111と表示しなくてはいけません。 例) x = 100, y = 200, kekka = 1/2 x = 4, y = 5, kekka = 0.8 x = 1, y = 111, kekka = 1/111 わたしは初めに、x ,yを比較してxのほうが大きい、または最大公約数がxと等しい場合はx/yを少数で表示し、 それ以外なら最大公約数で両方を割って分数で表示、という風に考えていましたが、 条件の無限小数の判定の方法がどうしても分かりません。 また、もし結果が0.0003などの場合、printf("%.4f", kekka); と書けば、0.0003とキレイに表示されますが、 printf("%f", kekka);のままでは、0.000300とゼロが余計に表示されてしまいます。 この桁数指定を引数などで与える方法が分かりません。 もしお詳しいかたいらっしゃいましたら、ご教授ください。 よろしいお願いします。

  • このプログラム見てほしいです!!

    #include <stdio.h> int gcd2(int a, int b) { if (!b) return a; return gcd2(b, a%b); } int main() { int a, b, c; printf("2つの任意の整数を入力せよ:"); scanf("%d %d",&a,&b); c=gcd2(a,b); printf("最小公倍数は%d\n",a*b/c); printf("最大公約数は%d\n",c); return 0; } で、最小公約数を出すことはできたのですが、全ての公約数を表示させたいんです!!どうやったらいいのでしょうか??プログラミングまだ初心者なので、ちょっと行き詰ってしまいました。。。 お時間があればでいいのですが、もう一つわからないプログラムがあります。 自然数nを入力し、x^2+y^2=z^2 (x<y)を満たすようなn以下の自然数の組(x,y,z)がいくつあるのかを出力するプログラムなのですが、全くわからず行き詰っています。。どなたかお時間があれば教えて頂きたいです。 色々と申し訳ありません。お願いします(__)

専門家に質問してみよう