1. 計算機應用系統方面的編程題
解:MOV A,R1
MOV R0,A
(2)外部RAM 20H單元內容送R0。
解:MOV R0,#20H
MOVX A,@R0
MOV R0,A
(3)外部RAM 20H單元內容送內部RAM 20H單元。
解:MOV R0,#20H
MOVX A,@R0
MOV @R0,A
(4)外部RAM 1000H單元內容送內部RAM 20H單元。
解:MOV DPTR,#1000H
MOVX A,@DPTR
MOV 20H,A
(5)外部ROM 2000H單元內容送R0。
解:MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R0,A
(6)外部RAM 2000H單元內容送內部RAM 20H單元。
解:MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20,A
(7)外部RAM 2000H單元內容送外部RAM 20H單元。
解:MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R0, #20H
MOV @R0,A
2-2 已知A=7AH,R0=30H,(30H)=A5H,PSW=81H。問執行以下各指令的結果(每條指令都以題中規定的數據參加操作)。
(1)XCH A,R0 A=30H,R0=7AH, P=0
(2)XCH A,30H A=A5H, (30H)=7AH, P=0
(3)XCH A,@R0 A=A5H, (30H)=7AH, P=0
(4)XCHD A,@R0 A=75H, (30H)=AAH, P=1
(5)SWAPA A=A7H P=1
(6)ADD A,R0 A=AAH Cy=0 OV=1 P=0
(7)ADD A,30H A=1FH Cy=1 OV=0 P=1
(8)ADD A,#30H A=AAH Cy=0 OV=1 P=0
(9)ADDC A,30H A=20H Cy=1 OV=1 P=1
(10)SUBB A,30H A=D4H Cy=1 OV=1 P=0
(11)SUBB A,#30H A=49H Cy=0 OV=0 P=1
(12)DA A A=80H Cy=1 P=1
(13)RL A A=F4H Cy=1 P=1
(14)RLC A A=F5H Cy=0 P=0
(15)CJNE A,#30H,00 A=7AH Cy=0 P=1
(16)CJNE A,#30H,00 A=7AH Cy=1 P=1
2-3 設內部RAM的30H單元內容為40H,即(30H)=40H,還知(40H)=10H,(10H)=00H,埠P1=CAH,問執行以下指令後各有關存貯器單元、寄存器及埠的內容(即R0,R1,A,B,P1,40H,30H及10H單元)。
MOV R0,#30H
MOV A,@R0
MOV R1,A
MOV B,@R1
MOV @R1,P1
MOV P2,P1
MOV 10H,#30H
MOV 30H,10H
解:每條指令執行後的結果依次如下列所示:R0=30H,A=40H,R1=40H,B=10H,(40H)=CAH,P2=CAH,(10H)=20H,(30H)=20H。
由此可知執行後的各單元內容:R0=30H,R1=40H,A=40H, B=10H, P1=CAH, (40H)=CAH,(30H)=20H,(10H)=20H。
2-4 設R0=17H,A=83H,(17H)=34H,問執行以下指令後,A=?
ANL A,#17H
ORL 17H,A
XRL A,@R0
CPL A
解:此題是為了熟悉邏輯運算指令。各條指令的執行結果如下:
A←83H∧17H=10000011∧00010111=03H
(17H) ←34H∨03H=00110100∨00000011=37H
A←03H⊕37H=00000011⊕00110111=34H
A←A=00110100=CBH
所以程序執行後,A=CBH
2-5 試編寫程序,將內部RAM的20H,21H,22H三個連續單元的內容依次存入2FH,2EH和2DH單元。
解:此題可以直接用傳送指令來完成:
MOV 2FH,20H
MOV 2EH,21H
MOV 2DH,22H
當然也可以用循環程序來做:
MOV R0,#20H ;源數據區首地址
MOV R1,#2FH ;目的數據區首地址
MOV R3,#03H ;數據塊長度
LOOP: MOV A,@R0
MOV @R1,A
INC R0
DEC R1
DJNZ R2,LOOP
SJMP $
2-6 編寫程序,進行兩個16位數的減法:6F5DH-13B4H。結果存至內部RAM的30H和31H單元,30H存差的低8位。
解:程序如下:
MOV A,#5DH
CLR C
SUBB A,#0B4H
MOV 30H,A
MOV A,#6FH
SUBB A,#13H
MOV 31H,A
SJMP $
由於MCS=51指令系統中,減法指令只能完成帶借位減法,所以在開始做減法時,一般都要對進位位Cy清0。
2-7 編寫程序,若累加器A的內容分別滿足以下條件時,則程序轉至LABEL存貯單元。設A中存的是無符號數。
1、A 10
解:此題可直接用比較條件轉移指令來完成,有關的程序語句如下:
CJNE A,#0AH,00H
JNG LABEL
比較條件轉移指令根據A-0AH的結果來位置Cy的值,只要A 10,減法就不需要借位,即Cy=0。再用一條「JNC」指令就可以決定是否要轉移至LABEL。偏移量00H表示比較後無論結果如何都先執行下一條語句。
2、A>10
解:這時如果仍然與0AH比較,則無法區分A >10(要轉移)和A=10(不轉移)。當然也可以增加其它的指令(如累加器判斷零條件轉移語句等)來完成所需的功能,但會使語句增多,程序不夠簡潔。不如直接與0BH(十進制數11)比較,比較之後A 11都使Cy=0,相當於A>10才使Cy=0。仍用兩條語句就能完成所需功能
CJNE A,#0BH,00H
JNG LABEL
3、A 10
解:這種情況與題(2)相似,可直接與11作比較,但這時是Cy=1時才轉移。
CJNE A,#0BH,00H
JC LABEL
4、A<10
解:這時只需直接和10作比較即可,與題(1)類似:
CJNE A,#0AH,00H
JC LABEL
2-8 已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H。問此時執行RET指令後,SP=?PC=?
解:MCS-51系統中,堆棧是向上生長的,故出棧操作時堆棧指針要減小。執行RET指令的過程如下:
PC15-8 (SP) 即PC15-8=(25H)=34H
SP SP-1 即SP=24H
PC7-0 (SP) 即PC7-0=(24H)=12H
SP SP-1 即SP=23H
結果為:SP=23H,PC=3412H
2-9 若SP=25H,PC=2345H,標號LABEL所在的地址為3456H,問執行長調用指令LCALL LABEL後,堆棧指針和堆棧的內容發生什麼變化?PC的值等於什麼?
解:長調用指令完成兩個功能:把下一條指令地址堆入堆棧,並把所調用子程序的入口地址賦予程序計數器PC。過程如下:
PC PC+3 所以PC=2345H+3=2348H
SP SP+1 所以SP=26H
(SP) PC7-0 所以(26H)=48H
SP SP+1 所以SP=27H
(SP) PC15-8 所以(27H)=23H
PC LABEL 所以PC=3456H
結果應為:SP=27H,(26H)=48H,(27H)=23H,PC=3456H。
2-10 上題的LCALL指令能否直接換成ACALL指令,為什麼?如果使用ACALL指令,則可調用的地址范圍是什麼?
解:ACALL指令只能在2K位元組范圍內調用。具體來講,要求PC+2後,PC的高5位與調用地址LABEL的高5位相同。或者說執行ACALL以後的PC值和調用地址應在同一頁內(每頁地址范圍為2K位元組)。在本題中:
PC+2=2345+2=2347H,高5位00100
而 LABEL=3456H, 高5位00110
兩者不相等,不在同一頁內,所以不能直接換成ACALL指令
如果使用ACALL指令,則可調用地址最小值為2000H,最大值為27FFH。即高5位地址保持00100不變,低11位地址可以從全0變為全1。地址范圍為2K位元組。
2-11 試編寫程序,查找在內部RAM的20H-50H單元中是否有0AAH這一數據。若有,則將51H單元置為01H;若未找到;則使51H單元置為0。
解:這個題可以有兩種基本的解法。其一是先計算出數據塊的長度,然後再作循環和比較,程序如下:
CLR C
MOV R0,#20H ;R0中為數據塊首地址
MOV A,#50H ;數據塊末地址
SUBB A,R0
INC A
MOV R1,A ;R1存數據塊長度
LOOP1:CJNE @R0,#0AAH,LOOP2
MOV 51H,#01H ;找到置(51H)=01H
SJMP LOOP3
LOOP2: ING R0
DJNZ R1,LOOP1
MOV 51H,#00H ;未找到,置(51H)=01H
LOOP3: SJMP $
第二種解法則直接用比較條件轉移指令判斷是否已經完成最後一次比較。這時MCS-51指令系統的特點之一。程序如下:
MOV R0,#20H ;R0存數據塊首地址
LOOP1: CJNE @R0,#0AAH,LOOP2 ;比較
MOV 51H,#01H ;找到,置(51H)=01H
SJMP LOOP3
LOOP2: ING R0
DJNZ R0,#51H,LOOP1 ;未比較完則循環
MOV 51H,#00H ;未找到,置(51H)=01H
LOOP3: SJMP $
2-12 試編寫程序,查找在內部RAM的20H-50H單元中出現00H的次數,並將查找的結果存入51H單元。
解:此題的解法與上題相似,採用第二種解法,程序如下:
MOV R0,#1FH
MOV R1,#00H ;R1用作計數器
LOOP1: ING R0
CJNE @R0,#00H,LOOP2
INC R1 ;找到一個00H,計數器加1
LOOP2: CJNE @R0,#50H,LOOP1 ;未比較完則循環
MOV 51H,R1 ;存比較結果
SJMP $
2-13 試編寫程序,求20H單元和21H單元中兩個補碼數差的絕對值,即 。結果保留在A中。若計算結果出現溢出,則置22H單元為0FFH,否則,22H應為00H。
解:可直接用減法指令來完成減法,然後依據差的符號來求絕對值,若差為正數,則差就是所求絕對值。若差為負數,則求反加一之後就可得到絕對值。當然減法之後先要判斷是否溢出。若溢出,則只需置溢出標記:使(22H)=0FFH即可。程序如下:
CLR C
MOV 22H,#0FFH
MOV A,20H
SUBB A,21H
JB OV,NEXT
JNB ACC.7,NEXT1 ;差為正則轉移
CPL A ;差為負,求補為絕對值
ING A
NEXT1:MOV 22H.,#00H
NEXT: SJMP $
2-14 試編寫程序,求20H,21H,22H單元的三個補碼數差得絕對值,即 。結果保留在A中。若運算出現溢出,則置23H單元為0FFH;否則,置23H單元為00H。
解:此題的解法與上題相似。只是每次減法以後都要判斷是否出現溢出,而不是做完兩次減法以後才判斷溢出。因為有可能第一次減法以後已經溢出,再作一次減法以後反倒沒有溢出,而這時的結果實際上已經不正確了。例如,64-(-64)-(-1)=129。結果已經溢出,但分兩步運算時,先由
64-(-64)=01000000-11000000=10000000
這時已經出現溢出,OV=1。若再作第二次減法,則結果為:
10000000-11111111=10000001
溢出標志反而被清零(因為負數減負數不可能溢出),但實際的結果並不正確。所以,需要每作完一次減法運算就檢查溢出標志。程序如下:
CLR C
MOV 23H,#0FFH ;先置溢出標志
MOV A,20H
SUBB A,21H ;第一次相減
JB OV,NEXT ;溢出則結束
CLR C ;准備第二次相減
SUBB A,22H ;第二次相減
JB OV,NEXT ;溢出則結束
JNB ACC.7,NEXT1 ;差為正則轉移
CPL A ;求反加一
ING A
NEXT1:MOV 23H.,#00H
NEXT: SJMP $
2-15 有一個16位二進制數,高8位存於21H單元,低8位存於20H單元。試問:(1)執行以下程序段,完成什麼邏輯功能?(2)能否用MOV指令替代其中的XCH指令而不改變程序的邏輯功能?寫出相應的程序段。(3)這兩個程序段的執行結果是否完全相同?差別在那裡?
CLR C
XCH A,21H
RRC A
XCH A,21H
XCH A,20H
RRC A
XCH A,20H
解:(1)程序完成的邏輯功能是使21H和20H中的16位二進制數右移一位,並使最高位為0,一般稱為邏輯右移一位。
(2)可以用MOV指令,修改後程序段如下:
CLR C
MOV A,21H
RRC A
MOV 21H,A
MOV A,20H
RRC A
MOV 20H,A
(3)有所差別。雖然從16位右移功能來說兩者的功能是相同的,但第一個程序段執行後,累加器A的內容仍維持原值,而第二個程序段執行後將改變A中的數值。
2-16 分析以下程序段的邏輯功能。若要用MOV指令代替其中的交換指令而不改變程序的邏輯功能,應如何進行修改?設20H中存放的是兩個四位二進制數。
MOV R1,#20H
XCHD A,@R1
ADD A,#01H
XCHD A,@R1
XCH A,@R1
ADD A,#01H
XCH A,@R1
解:程序的功能是將20H單元中的兩個四位二進制數分別加1,並且舍棄可能產生的進位。如(20H)=6AH,程序執行後位(20H)=7BH。又如(20H)=9FH,執行後(20H)=A0H。
不採用交換指令而要完成同樣的功能,可以有多種修改方法。以下僅為一例:
MOV R1,#20H
XCHD A,@R1
ADD A,#01H ;低4位加1
JB AC,NEXT ;判斷低四位有無進位
ADD A,#01H ;高4位加1
NEXT: MOV @R1,A ;送回20H單元
2-17 分析以下程序段的運行結果。若是將其中的DA A指令取消,則結果會有什麼不同?
CLR C
MOV 20H,#99H
MOV A,20H
ADD A,#01H
DA A
MOV 20H,A
解:程序運行結果是A=00H,Cy=1,(20H)=00H。
取消DAA指令後,運行結果為A=9AH,Cy=0,(20H)=9AH。
2-18 以下的兩個程序段中,R2內所存入的都是兩位16進制數。試問這兩個程序段各進行多少次循環?
MOV R2,#60H
LOOP:……
……
DJNZ R2,LOOP
SJMP $
MOV R2,#60H
LOOP:……
2. 互聯網+項目編程題目有哪些
互聯網+項目編程題目有,移動數字游戲,學生信息管理系統,超市庫存管理系統,電話號碼存儲系統等等。
互聯網+是指在創新2.0(信息時代、知識社會的創新形態)推動下由互聯網發展的新業態,也是在知識社會創新2.0推動下由互聯網形態演進、催生的經濟社會發展新形態。
3. 計算機二級C語言考試內容有那些
二級計算機是國家計算機等級考試的一部分,主要考察的是C語言的計算機編程能力。考核內容包括計算機語言與基礎程序設計能力,要求參試者掌握一門計算機語言。具體考點如下:1、C語言程序的結構。需重點了解程序的構成,main函數和其他函數,源程序的書寫格式。2、數據類型及其運算。包括C的數據類型(基本類型,構造類型,指針類型,無值類型)及其定義方法以及C運算符的種類、運算優先順序和結合性等。3、基本語句。需要了解掌握表達式語句,空語句,復合語句。以及輸入輸出函數的調用,正確輸入數據並正確設計輸出格式等。4、選擇結構程序設計,各類語句以及選擇結構嵌套。5、循環結構程序設計,理解各類循環、語句以及循環的嵌套。6、會一維數組和二維數組的定義、初始化和數組元素的引用。7、庫函數的正確調用,函數的定義方法、正確調用。8、文件操作,如文件的打開、關閉、讀寫、定位。9、地址與指針變數的概念,地址運算符與間址運算符。10、結構體與共同體。11、位運算符的含義和使用。12、編譯預處理等。