16 位元加法
參考用文章~
參考用文章~
開頭又是先抱怨XD
一般來說我對教授大人要用啥軟體寫不會有意見
.......不過SimLab-51 V2.08 win7 x64根本不能裝啊
那到底是多以前的版本啊
因為不小心自己放了一堂不該放的假
所以以下內容全都是靠google跟SimLab-51亂湊出來的XD
貨源家裡電腦太爛也是個微妙的點啊
看來除了"認真上進"以後要從哪進貨還要考慮一下硬體部份= =|||
參考資料:
小木偶的網站 :內容很豐富不過這是教組語沒跟你說專教8051喔
8051的指令集:方便查語法罷了
8051介紹:同上
資料記憶體(RAM):看哪些記憶體位置可以拿來亂搞
什麼是「組合語言」?:導論~毫無概念者看
[MASM學習筆記]第一課:數字系統與暫存器:其實這跟8051無關
一般來說我對教授大人要用啥軟體寫不會有意見
.......不過SimLab-51 V2.08 win7 x64根本不能裝啊
那到底是多以前的版本啊
因為不小心自己放了一堂不該放的假
所以以下內容全都是靠google跟SimLab-51亂湊出來的XD
貨源家裡電腦太爛也是個微妙的點啊
看來除了"認真上進"以後要從哪進貨還要考慮一下硬體部份= =|||
參考資料:
小木偶的網站 :內容很豐富不過這是教組語沒跟你說專教8051喔
8051的指令集:方便查語法罷了
8051介紹:同上
資料記憶體(RAM):看哪些記憶體位置可以拿來亂搞
什麼是「組合語言」?:導論~毫無概念者看
[MASM學習筆記]第一課:數字系統與暫存器:其實這跟8051無關
題目的樣子(是說為啥要再上傳前一天才公佈題目= =|||)
16 位元加法
求(十進制) 7000 + 2000 之和,將答案顯示在 16 LEDs 之上,LED亮表示對應的位元值為 1,否則為 0。
顯示器規定:
使用兩個 8 LEDs 共陽模組,所求之和的高位元组顯示在 Port 1 所控制的 LEDs,低位元组顯示在 Port 0 所控制的 LEDs。
先來看看這微妙的題目~共陽模組??亮代表1??
總之就是先開兩個8LEDs對吧
16 位元加法
求(十進制) 7000 + 2000 之和,將答案顯示在 16 LEDs 之上,LED亮表示對應的位元值為 1,否則為 0。
顯示器規定:
使用兩個 8 LEDs 共陽模組,所求之和的高位元组顯示在 Port 1 所控制的 LEDs,低位元组顯示在 Port 0 所控制的 LEDs。
先來看看這微妙的題目~共陽模組??亮代表1??
總之就是先開兩個8LEDs對吧
請注意!不要把開出來的視窗弄成全螢幕~
不然可能會跟某白痴一樣覺得為啥還是只有8個燈泡而狂開了一大堆
記得其中一個要改連線設定~改成P1
程式碼版本一:直接從SimLab-51提供的兩個範例混在一起的XDDD
(這也是我直接上傳的版本.)
不然可能會跟某白痴一樣覺得為啥還是只有8個燈泡而狂開了一大堆
記得其中一個要改連線設定~改成P1
程式碼版本一:直接從SimLab-51提供的兩個範例混在一起的XDDD
(這也是我直接上傳的版本.)
開頭先說 ; 代表註解的意思
VAL1: EQU 40H ; 某個記憶體位置據上面那篇說:『位址30H-7FH:使用者RAM區域』所以可以隨便用
VAL2: EQU VAL1+1 ; EQU 像是define 也就是這行像是#define VAL2 VAL1+1;
RES: EQU VAL2+2
;7000=0x1b58 用16進位比較容易看
;2000=0x07d0
START:
MOV VAL2,#58H ;前面加個#好像代表把數值放進這個記憶體的樣子
MOV VAL2+1,#0xD0h ;直接打d0好像會被誤會成暫存器之類的只好加上0x代表16進制
MOV A,VAL1+1 ;A就是暫存器啊
ADD A,VAL2+1
CPL A ; 就是 !A 因為共陽模組0才會亮所以只好全部改掉
MOV RES+1,A
MOV P0,RES+1 ;把算出來的直丟給P0這樣就會亮的樣子
MOV VAL1,#1BH
MOV VAL2,#07H
MOV A,VAL1
ADDC A,VAL2 ;注意:是將累機器與位元組之值以及進位旗號值,三者相加~也就是會把剛剛進位的部份補上
CPL A
MOV RES,A
MOV P1,RES
AJMP $ ;其實我看不懂這個XD
END
VAL1: EQU 40H ; 某個記憶體位置據上面那篇說:『位址30H-7FH:使用者RAM區域』所以可以隨便用
VAL2: EQU VAL1+1 ; EQU 像是define 也就是這行像是#define VAL2 VAL1+1;
RES: EQU VAL2+2
;7000=0x1b58 用16進位比較容易看
;2000=0x07d0
START:
MOV VAL2,#58H ;前面加個#好像代表把數值放進這個記憶體的樣子
MOV VAL2+1,#0xD0h ;直接打d0好像會被誤會成暫存器之類的只好加上0x代表16進制
MOV A,VAL1+1 ;A就是暫存器啊
ADD A,VAL2+1
CPL A ; 就是 !A 因為共陽模組0才會亮所以只好全部改掉
MOV RES+1,A
MOV P0,RES+1 ;把算出來的直丟給P0這樣就會亮的樣子
MOV VAL1,#1BH
MOV VAL2,#07H
MOV A,VAL1
ADDC A,VAL2 ;注意:是將累機器與位元組之值以及進位旗號值,三者相加~也就是會把剛剛進位的部份補上
CPL A
MOV RES,A
MOV P1,RES
AJMP $ ;其實我看不懂這個XD
END
結束wwwww
補充說明~這程式的想法就是先拿3個記憶體(40h,41h,42h)存要算的數,再拿兩塊記憶體存結果(43h,44h)
微妙的是兩個16進位的數字應該需要4個記憶體吧= =|||
例如
7000=0x1B 58
2000=0x07 D0
PS.一個記憶體只有8位元也就是從00~FF
總之他是把41H跟42H內的值先相加存到44H
再把40H跟41H還有進位旗標的值相加存到43H
所以答案就是43H,44H可喜可賀可喜可賀個屁~
~依照題目固定是7000+2000的話我有需要拿5個記憶體當變數嗎0.0
所以後來改成了這樣~
補充說明~這程式的想法就是先拿3個記憶體(40h,41h,42h)存要算的數,再拿兩塊記憶體存結果(43h,44h)
微妙的是兩個16進位的數字應該需要4個記憶體吧= =|||
例如
7000=0x1B 58
2000=0x07 D0
PS.一個記憶體只有8位元也就是從00~FF
總之他是把41H跟42H內的值先相加存到44H
再把40H跟41H還有進位旗標的值相加存到43H
所以答案就是43H,44H可喜可賀可喜可賀個屁~
~依照題目固定是7000+2000的話我有需要拿5個記憶體當變數嗎0.0
所以後來改成了這樣~
;7000=0x1b58
;2000=0x07d0
START:
MOV A,#58H
ADD A,#0xD0h
CPL A
MOV P0,A
MOV A,#1BH
ADDC A,#07H
CPL A
MOV P1,A
AJMP $
END
什麼屁記憶體都沒用~直接把要算的值丟到A裡面再直接輸出到P
我在猜這才是教授要的版本吧= =||| 算了~懶得重傳
寫的時候滿腦子等著看F/Z 忘了先確認後再交了XDDDDD
反正結果對就是對!(應該吧
;2000=0x07d0
START:
MOV A,#58H
ADD A,#0xD0h
CPL A
MOV P0,A
MOV A,#1BH
ADDC A,#07H
CPL A
MOV P1,A
AJMP $
END
什麼屁記憶體都沒用~直接把要算的值丟到A裡面再直接輸出到P
我在猜這才是教授要的版本吧= =||| 算了~懶得重傳
寫的時候滿腦子等著看F/Z 忘了先確認後再交了XDDDDD
反正結果對就是對!(應該吧
是說組語其實是應該自己好好學的東西說
只是我太忙了啦~(像看動畫啦)
是說我發現貨源有太過集中的傾向
.....這樣不太好說
把作業外包也是該分散風險的QQ
還有我段考應該是要完蛋了
需要筆記啊!!!
電腦網路、電子電路(公式)、行動通訊
這三科是要背的....真麻煩
線性代數.....沒有計算機用QQ
陰文......我沒有多餘的記憶力
組語跟JAVA要背一下語法~
複製貼上是寫好程式的不二法門wwww
我也才一條~也還好嘛
...............還有另一個版本,原圖
JAVA也快習慣了
下一篇應該是外星人大戰地球人吧(?)