① 微機組成原理編程題
1、
DATA SEGMENT PARA PUBLIC 'DATA' ;數據段定義
BLOCK DB 200
DATA ENDS
STACK SEGMENT PARA STACK 'STACK' ;堆棧段定義
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT PARA PUBLIC 'CODE' ;代碼段定義
ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE
START:
MOV AX,0 ;需要填充的位元組
MOV CX,100 ;設置循環次數
LEA DI,BLOCK ;ES:DI指向填充起始地址
REP STOSB ;重復填充
MOV AX,4C00H ;調用INT 21h的4Ch功能退出
INT 21H
CODE ENDS
END START
2、
數據段和堆棧段定義我就不寫了,只寫代碼段
CODE SEGMENT PARA PUBLIC 'CODE' ;代碼段定義
ASSUME DS:DATA,ES:DATA,SS:STACK,CS:CODE
START:
MOV CX,100 ;設置循環次數
LEA SI,DAT1 ;DS:SI指向源數據地址
LEA DI,DAT2 ;ES:DI指向目標數據地址
REP MOVSB ;重復復制
MOV AX,4C00H ;調用INT 21h的4Ch功能退出
INT 21H
CODE ENDS
END START
3、該程序作用是將某長度為30的字元串中的所有字元'A'替換為'a'
LEA BX,STR ;將STR變數的起始地址放到BX寄存器
MOV CX,30 ;設置循環次數為30
LP:CMP [BX],'A' ;循環開始,判斷BX指向的字元是否為'A'
JNZ NEXT ;如果不為'A'跳轉到NEXT標號
MOV [BX],'a' ;將BX所指的字元修改為'a'
NEXT:INC BX ;BX指向下一個字元
LOOP LP ;循環(從LP標號處開始)直至CX=0(即循環30次)
HLT ;停機
② 微機原理編程題,判斷一個數是正負還是0,急!!!十分感謝!!!!
Pascal語言:
var a:real;
begin
readln(a);
if (a>0) then writeln('+');
if (a=0) then writeln('0');
if (a<0) then writeln('-');
readln;
end.
③ 微機原理題目 判斷指令對錯,如果錯誤說明原因 1,XCHG CS,AX 2,MOV [BX],[1000
XCHG CS,AX錯誤,不能直接修改CSMOV [BX] [1000]錯誤 不能在兩個內存單元之間直接進行數據傳送XCHG BX IP錯誤 不能用名字直接訪問IP PUSH CS POP CS 錯誤 不允許直接修改CS值 IN BX DX 錯誤 輸入數據必須使用累加器AL或AX MOV BYTE BX 1000 ;格式錯誤,且超范圍,應為MOV word PTR BX1000MOV CS 1000;不允許直接修改CS值MOV BX,OFFSET VAR[SI] 錯誤 VAR是內存變數,[SI]是源變址寄存器,OFFSET是取偏移量,三者不能放在一起MOV AX,[SI][DI] 錯誤 指令中不能同時出現兩個變址寄存器MOV COUNT[BX][SI],ES:AX錯誤 es:是段跨越前綴,只能用在存儲器操作數前面,而「AX」是寄存器操作數,前面不能加段跨越前綴④ 微機原理 匯編語言 小舅子考試問我些編程問題,在下實在不會,求各路英雄賜教解困。謝謝!
1.計算機系統中cpu的地址匯流排有21條則能定址的最大內存空間為多少mb
答:計算機用0和1表示某種狀態,一根地址線能表示兩種狀態,兩根地址線能表示四種狀態,以此類推,21根地址線能夠表示2的21次冪,即2097152個位元組。所以,21條地址線能定址的最大內存空間為2MB。
2.8086棧操作一次處理多少個位元組
答:2位元組。
3.指令ADD AX,12H中的目的操作是什麼定址方式
答:寄存器定址方式。
4.在8086系統中默認的8位累加器是什麼
答:AL
5.PD偽指令定義變數有多少個位元組
答:PD偽指令,疑為樓主誤輸,本意是DD吧。定義變數的偽指令:
DB:位元組
DW:字(雙位元組)
DD:雙字(四位元組)
DF:六位元組
DQ:八位元組
DT:十位元組
6.8086的AH寄存器是多少位寄存器
答:8位寄存器。
7.MOV AX[BX]指令中,目的操作數是什麼
答:AX
8.POP指令的作用是什麼
答:把堆棧段中棧頂指針所指的一個字彈出並賦給某個16位寄存器或16位內存單元,同時,棧頂指針加2。
9.XCHG指令的作用是什麼
答:將源操作數與目的操作數的值互換。
10.用DEBUG調試程序時A命令的作用是什麼
答:輸入匯編語言指令。
11.MOV[BP12/12H],AX 假設(AX)=1212H,(DS)=2000H,(CS)=5000H,(SS)=6000H,(BP)=2000H計算操作書的物理地址
答:樓主這條指令有語法錯誤,試改為:MOV [BP+1212H],AX
則目的操作數的物理地址為:23232H
12.限定只能使用堆棧操作,不能用其它指令,將AX與BX寄存器的內容對調,寫出判斷程序片斷。
答:不需判斷,直接用push和pop指令即可實現。指令代碼如下:
push ax
push bx
pop ax
pop bx
13.已知[DS]=1111H,[SS]=2222H,[ES]=3333H,[BX]=11H,[BP]=22H,計算"MOV AX,[BX]"中匯編指令源操作數定址所指向的物理單元
答:11121H
14.已知[AL]=8AH [CL]=3;[CF]=1;以及一連續執行的匯編程序,在下列方格內分別填入每一步執行後AL和CF正確值(一共9個格子,要求寫2進制數,前8個格子寫AL最後一個CF。)
SHL AL,1; |0|0|0|1|0|1|0|0|1|
ROL AL,CL;|1|0|1|0|0|0|0|0|0|
RCR AL,CL;|0|0|0|1|0|1|0|0|0|
15.寫出下列指令的含義分別是什麼 JAE, JGE ,JB ,JCXZ
答:
1、JAE:條件轉移指令,當目的操作數高於或等於源操作數時轉移,用於無符號數的比較或判斷。
2、JGE:條件轉移指令,當目的操作數大於或等於源操作數時轉移,用於有符號數的比較或判斷。
3、JB:條件轉移指令,當目的操作數低於源操作數時轉移,用於無符號數的比較或判斷。
4、JCXZ:條件轉移指令,當計數寄存器CX=0時轉移,用於字元串的比較活掃描。
16.1+2+3+...N累加加到1000,統計被累加的自然個數送CN,累加和送SUM
答:下面的程序通過編譯、運行正確。當自然數達到45的時候,累加和為1035。
Code Segment
Assume CS:Code,DS:Code
CN DW ?
SUM Dw ?
Start: push cs
pop ds ;使數據段與代碼段在同一個段
xor ax,ax ;初始化累加和
mov cx,1 ;自然數初值
Adding: add ax,cx ;相加
cmp ax,1000 ;累加和與1000相比較
jae Save_Value ;若大於或等於1000,結束累加,保存相關數據
inc cx ;計數
jmp Adding
Save_Value: mov cn,cx ;保存被累加的自然數個數
mov SUM,ax ;保存累加和
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束
17.顯示一個字元串倒序顯示,將下面程序填寫完整並寫出結果
答:這道題,樓主有幾處抄寫錯誤,根據題意及原程序段,我給更正一下。凡填空處,所填內容除已經定義的標識符外,其它內容皆用小寫,並在其後以「;序號」的方式標注。
DATA SEGMENT
MSG DB 'HIS IS A STRING!$'
CT=$-MSG-2
CRLF DB OAH,ODH,'$'
DATA ends ;1
CODE SEGMENT
ASSSUME DS:DATA,CS:CODE,ES:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
lea dx,MSG ;2
MOV AH,9
INT 21H
LEA DX,CRLF
mov ah,9 ;3
INT 21H
LEA BX,MSG
ADD BX,CT
MOV CX,CT+1
NEXT:
mov dl,[bx] ;4
MOV AH,2
INT 21H
DEC BX
LOOP NEXT
mov ah,4ch ;5
INT 21H
CODE ENDS
END MAIN
補充回答:
六、判斷題
(對)同一8086匯編程序中,可以多次用=偽指令對同一個常量進行定義。
(對)宏定義的長度對匯編後的程序長度沒有影響,但。。。用宏的次數對匯編後的長度有影響。
(對)在8086的匯編指令中,源操作數和目的操作數不能同時存儲器操作數。
(錯)偽指令DW的作用是定義一個位元組的數量。
(對)PUSH指令的作用是執行堆棧的壓入操作。
1. 計算機系統中CPU的地址匯流排有21條,則其能定址的最大內存空間 2 MB。
2. 8086系統中堆棧操作一次處理 2 個位元組。
3. 指令ADD AX,RH中,目的操作數是 寄存器 定址方式。
4. 在8086系統中,默認的8位累加器是 AL。
5. DD偽指令定義的變數有 4 個位元組。
6. MOV AX,[BX] 指令中目的操作數是 B 定址方式。
A.立即 B.寄存器 C.寄存器間接 D.直接、
7. POP指令的作用是(C)
A.將某個字數數據壓入堆棧。B.將某個位元組數據壓入堆棧。C.將某個字數據從堆棧彈出D.將狀態寄存器壓入堆棧。
8. XCHG指令的作用是(C)
A.將操作數從8位擴展為16位。B.將操作數從16位壓縮為8位。C.將兩個操作數進行交換。D.用源操作數替換目的操作數。
9. DEBUG調試程序時,A命令的作用是(C)
A.現實數據 B. 刪除數據 C.匯編程序 D.單步運行
⑤ 幾道微機判斷題
對錯對對錯對錯
⑥ 微機原理判斷題,求解答!有追加!
MOV DL,BX 錯。源原操作寄存器16位,目的寄存器8位。
XCHG AL,50H 錯。寄存器AL不能與立即數50H交換數據。
IN BL,05H 錯。IN指令輸入的目的寄存器只能使用AL。
MOV AX,[SI][DI] 錯。一條MOV指令中不能同時使用SI和DI變址寄存器。
MOV IP, 0FFH 錯。程序指針IP不能MOV傳送
MOV AL, 234H 錯。源原操作數16位,目的寄存器8位。
⑦ 高手請進!微機語言匯編題!求助!!!!!!!!!
六、判斷題
(對)同一8086匯編程序中,可以多次用=偽指令對同一個常量進行定義。
(對)宏定義的長度對匯編後的程序長度沒有影響,但。。。用宏的次數對匯編後的長度有影響。
(對)在8086的匯編指令中,源操作數和目的操作數不能同時存儲器操作數。
(錯)偽指令DW的作用是定義一個位元組的數量。
(對)PUSH指令的作用是執行堆棧的壓入操作。
1. 計算機系統中CPU的地址匯流排有21條,則其能定址的最大內存空間 2 MB。
2. 8086系統中堆棧操作一次處理 2 個位元組。
3. 指令ADD AX,RH中,目的操作數是 寄存器 定址方式。
4. 在8086系統中,默認的8位累加器是 AL。
5. DD偽指令定義的變數有 4 個位元組。
6. MOV AX,[BX] 指令中目的操作數是 B 定址方式。
A.立即 B.寄存器 C.寄存器間接 D.直接、
7. POP指令的作用是(C)
A.將某個字數數據壓入堆棧。B.將某個位元組數據壓入堆棧。C.將某個字數據從堆棧彈出D.將狀態寄存器壓入堆棧。
8. XCHG指令的作用是(C)
A.將操作數從8位擴展為16位。B.將操作數從16位壓縮為8位。C.將兩個操作數進行交換。D.用源操作數替換目的操作數。
9. DEBUG調試程序時,A命令的作用是(C)
A.現實數據 B. 刪除數據 C.匯編程序 D.單步運行
1.計算機系統中cpu的地址匯流排有21條則能定址的最大內存空間為多少mb
答:計算機用0和1表示某種狀態,一根地址線能表示兩種狀態,兩根地址線能表示四種狀態,以此類推,21根地址線能夠表示2的21次冪,即2097152個位元組。所以,21條地址線能定址的最大內存空間為2MB。
2.8086棧操作一次處理多少個位元組
答:2位元組。
3.指令ADD AX,12H中的目的操作是什麼定址方式
答:寄存器定址方式。
4.在8086系統中默認的8位累加器是什麼
答:AL
5.PD偽指令定義變數有多少個位元組
答:PD偽指令,疑為樓主誤輸,本意是DD吧。定義變數的偽指令:
DB:位元組
DW:字(雙位元組)
DD:雙字(四位元組)
DF:六位元組
DQ:八位元組
DT:十位元組
6.8086的AH寄存器是多少位寄存器
答:8位寄存器。
7.MOV AX[BX]指令中,目的操作數是什麼
答:AX
8.POP指令的作用是什麼
答:把堆棧段中棧頂指針所指的一個字彈出並賦給某個16位寄存器或16位內存單元,同時,棧頂指針加2。
9.XCHG指令的作用是什麼
答:將源操作數與目的操作數的值互換。
10.用DEBUG調試程序時A命令的作用是什麼
答:輸入匯編語言指令。
11.MOV[BP12/12H],AX 假設(AX)=1212H,(DS)=2000H,(CS)=5000H,(SS)=6000H,(BP)=2000H計算操作書的物理地址
答:樓主這條指令有語法錯誤,試改為:MOV [BP+1212H],AX
則目的操作數的物理地址為:23232H
12.限定只能使用堆棧操作,不能用其它指令,將AX與BX寄存器的內容對調,寫出判斷程序片斷。
答:不需判斷,直接用push和pop指令即可實現。指令代碼如下:
push ax
push bx
pop ax
pop bx
13.已知[DS]=1111H,[SS]=2222H,[ES]=3333H,[BX]=11H,[BP]=22H,計算"MOV AX,[BX]"中匯編指令源操作數定址所指向的物理單元
答:11121H
14.已知[AL]=8AH [CL]=3;[CF]=1;以及一連續執行的匯編程序,在下列方格內分別填入每一步執行後AL和CF正確值(一共9個格子,要求寫2進制數,前8個格子寫AL最後一個CF。)
SHL AL,1; |0|0|0|1|0|1|0|0|1|
ROL AL,CL;|1|0|1|0|0|0|0|0|0|
RCR AL,CL;|0|0|0|1|0|1|0|0|0|
15.寫出下列指令的含義分別是什麼 JAE, JGE ,JB ,JCXZ
答:
1、JAE:條件轉移指令,當目的操作數高於或等於源操作數時轉移,用於無符號數的比較或判斷。
2、JGE:條件轉移指令,當目的操作數大於或等於源操作數時轉移,用於有符號數的比較或判斷。
3、JB:條件轉移指令,當目的操作數低於源操作數時轉移,用於無符號數的比較或判斷。
4、JCXZ:條件轉移指令,當計數寄存器CX=0時轉移,用於字元串的比較活掃描。
16.1+2+3+...N累加加到1000,統計被累加的自然個數送CN,累加和送SUM
答:下面的程序通過編譯、運行正確。當自然數達到45的時候,累加和為1035。
Code Segment
Assume CS:Code,DS:Code
CN DW ?
SUM Dw ?
Start: push cs
pop ds ;使數據段與代碼段在同一個段
xor ax,ax ;初始化累加和
mov cx,1 ;自然數初值
Adding: add ax,cx ;相加
cmp ax,1000 ;累加和與1000相比較
jae Save_Value ;若大於或等於1000,結束累加,保存相關數據
inc cx ;計數
jmp Adding
Save_Value: mov cn,cx ;保存被累加的自然數個數
mov SUM,ax ;保存累加和
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束
17.顯示一個字元串倒序顯示,將下面程序填寫完整並寫出結果
答:這道題,樓主有幾處抄寫錯誤,根據題意及原程序段,我給更正一下。凡填空處,所填內容除已經定義的標識符外,其它內容皆用小寫,並在其後以「;序號」的方式標注。
DATA SEGMENT
MSG DB 'HIS IS A STRING!$'
CT=$-MSG-2
CRLF DB OAH,ODH,'$'
DATA ends ;1
CODE SEGMENT
ASSSUME DS:DATA,CS:CODE,ES:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV ES,AX
lea dx,MSG ;2
MOV AH,9
INT 21H
LEA DX,CRLF
mov ah,9 ;3
INT 21H
LEA BX,MSG
ADD BX,CT
MOV CX,CT+1
NEXT:
mov dl,[bx] ;4
MOV AH,2
INT 21H
DEC BX
LOOP NEXT
mov ah,4ch ;5
INT 21H
CODE ENDS
END MAIN