SPO 600 LAB 4ストリング研究室オプション1:計算機を加えること
5356 ワード
こんにちは、Spo 600(ソフトウェア移植性と最適化)のために研究室4へようこそ.これは材料の研究室です.私のチームはオプション1とオプション4で働きました.
導入
このブログはオプション1のために、私たちは6502アセンブリ言語を使用して追加計算機を作成しました.私は2つの数字を挿入し、それらを一緒に追加するユーザーのためのサブルーチンを作成します.
要件ユーザーが2桁までの2桁の数字を入力できるようにするサブルーチンを作成します.カーソルがどこにあるかを示して、ユーザーが数字キー(0 - 9)、バックスペースとキーを入力するのを許してください.アキュムレータ( a )レジスタにユーザーの入力値を返します. このサブルーチンを使用して、2つの数字(それぞれ0~99の範囲にある)を足して、結果を印刷するプログラムを書きます.
コーディング
思考と反射
アセンブリ言語プログラムは以前よりも難しくなってきており、この研究室では第3の研究室よりも難しくなっています.ユーザの入力の仕方、2つの数字と結果を保存し、結果を画面に表示する方法について多くの時間を費やしました.私が6502アセンブリ言語についての各ブログで述べたように、それは非常に低レベルのプログラミング言語であり、頻繁にメモリとレジスタにアクセスします.我々はこのプログラムのために設計された操作は、任意のより高いレベルの言語で非常に簡単です.しかしアセンブラ言語では、まだ構文に慣れていません.もっと多くのプラクティスが簡単にこの問題を解決するのを助けてくれることを願っています.
導入
このブログはオプション1のために、私たちは6502アセンブリ言語を使用して追加計算機を作成しました.私は2つの数字を挿入し、それらを一緒に追加するユーザーのためのサブルーチンを作成します.
要件
コーディング
define SCINIT $ff81 ; initialize/clear screen
define CHRIN $ffcf ; input character from keyboard
define CHROUT $ffd2 ; output character to screen
define SCREEN $ffed ; get screen size
define PLOT $fff0 ; get/set cursor coordinates
define RIGHT $81
define LEFT $83
define ENTER $0d
define BACKSPACE $08
define NUM1 $15;
define NUM2 $16;
jsr SCINIT
ldy #$00
jsr firstNumPrint ; ask for input for first number
jsr getNum; get the first number
jsr storeFirstNum ; then store the first number
ldy #$00
jsr secondNumPrint ; ask for input for second number
jsr getNum; get the second number
jsr storeSecondNum ; store the second number
ldy #$00
jsr resultPrintString ; print a string 'Result'
jsr printResult ; print the result
jmp mainLoop ; go back to the first step
getNum:
sec
jsr PLOT
ldx #$15
clc
jsr PLOT
getNumLoop:
sec
jsr PLOT
jsr CHRIN
charCheck:
cmp #BACKSPACE ; if user enter backspace, it erase the #$15 digit
beq move_back
cmp #RIGHT ; if user enter right arrow, it goes to the first digit
beq move_right
cmp #LEFT ; if user enter left arrow, it goes to the second digit
beq move_left
cmp #ENTER ; if user enter enter, it goes to the next process
beq move
printNum:
cmp #$30
bcc getNumLoop
clc
cmp #$3a
bcs getNumLoop
jsr CHROUT
sec
jsr PLOT
cpx #$17
bne getNumLoop
dex
clc
jsr PLOT
jmp getNumLoop
move_back:
cpx #$15
beq getNumLoop
jsr CHROUT
jmp getNumLoop
move_left:
cpx #$15 ; first digit
beq getNumLoop
jsr CHROUT
jmp getNumLoop
move_right:
cpx #$16 ; second digit
beq getNumLoop
jsr CHROUT
jmp getNumLoop
move:
sec
jsr PLOT
ldx #$15 ; first digit
clc
jsr PLOT
sec
jsr PLOT
clc
sbc #$2F ; to calculate it, it should be subtracted by #$2f
asl
asl
asl
asl
pha
ldx #$16
clc
jsr PLOT
sec
jsr PLOT
clc
sbc #$2F ; to calculate it, it should be subtracted by #$2f
pha
ldx #$00
iny
clc
jsr PLOT
sec
jsr PLOT
pla
tax
pla
rts
storeFirstNum:
sta NUM1
txa
eor NUM1
sta NUM1
rts
storeSecondNum:
sta NUM2
txa
eor NUM2
sta NUM2
rts
printResult:
sec
jsr PLOT
ldx #$15
clc
jsr PLOT
sec
jsr PLOT
sed
lda NUM1
adc NUM2
cld
pha
bcc outputAddition
ldx #$14
clc
jsr PLOT
sec
jsr PLOT
lda #$31
jsr CHROUT
outputAddition:
lsr
lsr
lsr
lsr
clc
adc #$30 ; as the received number does not fit for ASCII, it needs to add
jsr CHROUT
pla
and #$0F
clc
adc #$30 ; as the received number does not fit for ASCII, it needs to add
jsr CHROUT
sec
jsr PLOT
ldx #$00
iny
clc
jsr PLOT
rts
firstNumPrint:
lda firstNum,y
beq goback_main
jsr CHROUT
iny
bne firstNumPrint
secondNumPrint:
lda secondNum,y
beq goback_main
jsr CHROUT
iny
bne secondNumPrint
resultPrintString:
lda result,y
beq goback_main
jsr CHROUT
iny
bne resultPrintString
goback_main:
rts
firstNum:
dcb "E","N","T","E","R",32,"F","I","R","S","T",32,"N","U","M","B","E","R",":",32,32,"0","0"
dcb 00
secondNum:
dcb "E","N","T","E","R",32,"S","E","C","O","N","D",32,"N","U","M","B","E","R",":",32,"0","0"
dcb 00
result:
dcb "R","E","S","U","L","T",":"
dcb 00
これが結果です.思考と反射
アセンブリ言語プログラムは以前よりも難しくなってきており、この研究室では第3の研究室よりも難しくなっています.ユーザの入力の仕方、2つの数字と結果を保存し、結果を画面に表示する方法について多くの時間を費やしました.私が6502アセンブリ言語についての各ブログで述べたように、それは非常に低レベルのプログラミング言語であり、頻繁にメモリとレジスタにアクセスします.我々はこのプログラムのために設計された操作は、任意のより高いレベルの言語で非常に簡単です.しかしアセンブラ言語では、まだ構文に慣れていません.もっと多くのプラクティスが簡単にこの問題を解決するのを助けてくれることを願っています.
Reference
この問題について(SPO 600 LAB 4ストリング研究室オプション1:計算機を加えること), 我々は、より多くの情報をここで見つけました https://dev.to/qzhang125/spo600-lab4-6502-string-lab-option-1-adding-calculator-17m8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol