日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

當前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《微計算機原理》 > 第4章 匯編語言程序設計

第8節(jié) 自測題

 

自測題

1 程序在數(shù)據(jù)段中定義的數(shù)組如下:
  NAMES DB 'TOM.',20
     DB 'ROSE.',30
     DB 'KATE.',25
  請指出下列指令是否正確,為什么?
   (1) MOV BX,OFFSET NAMES
     MOV AL,[BX+5]
   (2) MOV AX,NAMES
   (3) MOV AX,WORD PTR NAMES+1
   (4) MOV AX,NAMES[BX][SI]
   (5) MOV AX,OFFSET NAMES[BX][SI]
     INC [AX]
   (6) LEA DI,NAMES[BX][SI]
     MOV AL,[DI]

答案

(1) 兩條指令都合法。
  (2) 這條指令不正確,因為NAMES的屬性為字節(jié),二目的寄存器是AX,所以類型不匹配。
  (3) 為合法指令。指令中講已定義的字節(jié)變量用偽操作PTR改變?yōu)樽诸愋?,所以避免了類型不匹配?br />   (4) 這條指令不正確,源操作數(shù)的數(shù)據(jù)類型偽字節(jié)型,目的操作數(shù)偽字類型,所以類型不匹配。
  (5) 這條指令不正確,因為在匯編過程中,OFFSET操作將得到變量的便移值,但對相對基址變址尋址方式形成的值在匯編指令時還是未知的;在第二條指令中,AX不能作為基址寄存器用。
  (6) 為合法指令。



2 假設程序中的數(shù)據(jù)定義如下:
  PARTNO DW?
  PNAME DB 16 DUP(?)
  COUNT DD ?
  PLENTH EQU $-PARTNO
  問PLENTH的值為多少?它標是什么意義?

答案

PLENTH的值為22,它表示從當前位置到PAERNO處所占的字節(jié)。
3 若WORD1及WORD2均為字變量,ADDITON為標號.請說明下列指令的錯誤之處:
  (1) JMP ADDITION[DI]
  (2) JNZ WORD2
  (3) JMP FAR ADDITION

答案

(1) 其錯在于兩個地址表達式不能相加;
  (2) 其錯在于條件轉移指令只能進行8位的相對尋址,而WORD2確是一個字變量;
  (3) 應該為:JMP FAR PTR ADDITION;
4 下面兩個語句有何區(qū)別:
  X1 EQU 1000H
  X2=1000H

答案

X1不能多次賦值,X2能多次賦值。
5 對于下面的數(shù)據(jù)定義,各條MOV指令單獨執(zhí)行后,有關寄存器的內容是什么?
  FLDB DB ?
  TABLEA DB 10 DUP(?)
  TABLEB DB 'ABCD'
  (1) MOV AX,TYPE FLDB
  (2) MOV AX,TYPE TABLEA
  (3) MOV CX,LENGTH TABLEA
  (4) MOV DX,SIZE TABLEA
  (5) MOV CX,LENGTH TABLEB

答案

(1) AX=1 (2) AX=1 (3) CX=10 (4) DX=10 (5) CX=1

6 已知堆棧段寄存器SS的內容是0F0A0H,堆棧指示器SP的內容是00B0H,先執(zhí)行兩條PUSH指令把8057H和0F79H入棧,然后執(zhí)行一條POP指令,試畫出示意圖,說明堆棧及SP內容的變化過程.

答案

見圖答4.6

7 試設計一個數(shù)據(jù)段DSEG,定義下列字符變量或數(shù)據(jù)變量.請畫出(1)~(5)題的內存分配圖,并指明它們的初值。
  (1) FIRST為十六進制數(shù)的字變量4020H;
  (2) SECOND為二進制數(shù)的字節(jié)變量01011100B;
  (3) THIRD為二進制數(shù)的字節(jié)變量64;
  (4) STRING為字符串變量ADDITION;
  (5) ASCDATA為ASCII數(shù)字變量‘46782';
  (6) TABL為10個字的數(shù)組變量;
  (7) REPDATA位數(shù)字0,2,3,0,6重復5次的字節(jié)變量;
  (8) ZESULT為10個0的字節(jié)變量。

答案

數(shù)據(jù)段DSEG定義如下:
  DSEG SEGMENT
  FIRST DW 4020H
  SECOND DB 0101100B
  THIRD DB 64D
  STRING DB ‘ADDITION’
  ASCDATA DB ‘46782’
  TABL DW 10 DUP(?)
  REPDATA DB 5 DUP(0,2,3,0,6)
  RESULT DB 10 DUP(0)

  內存分配情況:
   0100: 0000H 20H FIRST
         40H 
      0002H 01011100B SECOND
      0003H 64D THIRD
      0004H 41H STRING
      0005H 44H
      0006H 44H
      0007H 49H
      0008H 54H
      0009H 49H
      000AH 4FH
      OOOBH 4EH
      000CH 34H ASCDATA
      000DH 36H
      000EH 37H
      000FH 38H
      0010H 32H
8 設有3個字變量的變量名及其內容如下:
  VAR1 3C46H
  VAR2 F678H
  VAR3 0059H
  試設計一個數(shù)據(jù)段定義這三個變量及其地址表變量ADDRTABL(包括段地址和偏移地址)。

答案

DATA SEGMENT
     VAR1 DW 3C46H
     VAR2 DW F678H
     VAR3 DW 0059H
     ADDRTABL DD VAR1
         DD VAR2
         DD VAR3
   DATA ENDS
9 設有一個有符號數(shù)數(shù)組,共有M個字。試編一程序求其種最大的數(shù);若需求絕對值最大的數(shù),程序如何修改?又若數(shù)組元素為無符號數(shù),求最大數(shù)的程序應如何修改?

答案

DSEG SEGMENT
     DATA DW M DUP(?)
     MAX DW ?
  DSEG ENDS
  CSEG SEGMENT
     ASSUME CS:CSEG,DS:DSEG
  START:MOV AX,DSEG
     MOV DS,AX
     MOV MAX,DATA
     CLD
     MOV SI,OFFSET DATA
     MOV CX,M
  L1:LODSW
    CMP AX,MAX
    JNG LAB
    MOV MAX,AX
  LAB:LOOP L1
    MOV AH,4CH
     INT 21H
  CSEG ENDP
     END START
若需要絕對值最大的數(shù),則就需要將每個數(shù)最大絕對值求出后再比較,要在LODSB語句插入下面程序:
     AND AX,AX
     JNS LAB1
     NEG AX
   LAB1:CMP AX,MAX
且在程序初始化MAX的值時應送入0(最小的絕對值).
  若要對無符號數(shù)求最大值,則只需改變判別條件,即將
     CMP AX,MAX 改為:CMP AX,MAX
     JNG LAB      JBE LAB
10 試編寫一程序統(tǒng)計一個字中的“1”的個數(shù)。

答案

 

   STACK SEGMENT STACK
      DW 256 DUP(?)
   TOP LABEL WORD
   STACK ENDS
   DATA SEGMENT
   TW DB 1234H
   TWIS DW ?
   DATA ENDS
   CODE1 SEGMENT
      ASSUME CS:CODE1,DS:DATA,SS:STACK
   START:MOV AX,DATA
      MOV DS,AX
      MOV AX,STACK
      MOV SS,AX
      MOV SP,OFFSET TOP 
      MOV AX,TW
      CALL FAR PTR BCNT1;調BCNT1子程序
      PUSH BX
      MOV AL,AH
      CALL FAR PTR BCNT1
      POP AX
      ADD AX,BX
      MOV TWIS,AX
      MOV AH,4CH
      INT 21H
  CODE1 ENDS
  CODE2 SEGMENT
     ASSUME CS:CODE2
  BCNT1 PROC FAR
     MOV BX,0
     MOV SI,0
  BLOOP1:RCL AL,1
      JNC BLOOP2
      INC BX
  BLOOP2:INC SI
      CMP SI,8
      RET
  BCNT1 ENDP
  CODE2 ENDS
     END START
 

 


11 在首地址為DATA的字數(shù)組中存放了100H個補碼數(shù)。試編寫一個匯編語言程序,求出它們的平均值,放在AX寄存器中;同時求除數(shù)組中有多少個數(shù)小于此值,將結果放在BL中。

答案
CODE SEGMENT
     ASSUME CS:CODE,DS:CODE
   START:MOV AX,CODE
      MOV DS,AX
      MOV SI,OFFSET DATA
      MOV AX,0
      MOV DX,0
      CLC
  LP:ADD AX,[SI]]
   INC SI
   INC SI
   ADC DX,0
   LOOP LP
   MOV AX,DX
   MOV CX,100H
   MOV SI,OFFSET DATA
   MOV BL,0
  LP1:CMP [SI],AX
    JGE GRT
    INC BL
  GRT:INC SI
    INC SI
    LOOP LP1
 DATA DW 100 DUP(?)
 CODE ENDS
    END START

12 已知32為數(shù)存放在DX:AX中。試編寫一個匯編語言程序將32為數(shù)左移4位,并將高4位存入CH中。

答案

CSEG SEGMENT
  ASSUME CS:CSEG,DS:DSEG
  START:MOV CH,DH
     MOV CL,4
     SHR CH,CL
   L1:SHL AX,1
     RCL DX,1
     LOOP L1
     MOV AH,4CH
     INT 21H
  CSEG ENDS
     END START
13 AX寄存器中存放著4位十六進制數(shù)。試編寫一個匯編語言程序,將這4位十六進制數(shù)分別轉換為相應的ASCII碼,并依次存放到RESULT數(shù)組的4個字節(jié)中去,要求用調用子程序的方法實現(xiàn)。

答案

CODE SEGMENT
      ASSUME CS:CODE,DS:CODE
   START:MOV BX,CODE
      MOV DS,BX
      MOV CL,4
      MOV BL,4
      MOV SI,OFFSET RESULT
    LP:CALL HASC
      MOV [SI],DL
      INC SI
     SHR AX,CL
     DEC BL
     JNZ LP
   EXIT:MOV AH,4CH
     INT 21H
   HASC PROC NEAR
    MOV DL,AL
    AND DL,0FH
    CMP DL,9
    JA L2
    ADD DL,30H
   L1:RET
   L2:ADD DL,37H
     JMP L1
   HASC ENDP
   RESULT DB 4 DUP(?)
      CODE ENDS
      END START
14 設有兩個等字長字節(jié)型字符串。試編寫一個匯編語言子程序,比較它們是否完全相同;若相同,則將字幅“Y”送入AL中,否則,將字符“N”送入AL中。

答案

 CODE SEGMENT
      ASSUME CS:CODE,DS:CODE
   START:MOV AX,CODE
      MOV DS,AX
      CMPS STRING1,STRING2   
      JNZ NE
      MOV AL,‘Y’
      JMP EXIT
    NE:MOV AL,‘N’
   EXIT:MOV AH,4CH
      INT 21H
      STRING1 DB ‘...’
      STRING2 DB ‘...’
   CODE ENDS
     END START
15 輕編寫一程序,從附加段中一個未排序的字數(shù)組UNORDLST中,找出最大數(shù)和最小數(shù),分別放在AL和BX寄存器中。

答案

ESEG SEGMENT
      UNORDLST DW 50 DUP(?)
      COUNT EQU ($-UNORDLST)/2
   ESEG ENDS
   CSEG SEGMENT
      ASSUME CS:CSEG,ES:ESEG
   START:MOV AX,ESEG 
      MOV ESD,AX
      MOV CX,COUNT
      DEC CX
      LEA DI,UNORDLST
      MOV BX,ES:[DI]
      MOV AX,BX
   CHKMIN:ADD DI,2
      CMP ES:[DI],BX
      JAE CHKMAX
      JMP SHORT NEXTTEL
   CHKMAX:CMP ES:[DI],AX
      JBE NEXTTEL
      MOV AX,ES:[DI]
   NEXTTEL:LOOP CHKMIN
      MOV AH,4CH
      INT 21H
    CSEG ENDS
     END START
16 編寫一個匯編語言子程序,實現(xiàn)將一組(設有N個)7位ASCII碼變?yōu)榕夹r灤a。

答案

CODE SEGMENT
      ASSUME CS:CODE,DS:CODE
   START:MOV AX,CODE
      MOV DS,AX
      MOV SI,OFFSET NACSII
      MOV CX,7
      MOV DX,N
    LP0:MOV BL,[SI]
    LP1:SHR BL,1
      ADC AL,0
      LOOP LP1
      AND AL,01H
      ROR AL,1
      OR BL,AL
      DEC DX
      JNZ LP0
      MOV AH,4CH
      INT 21H
    CODE ENDS
       END START


17 試問下列偽指令在存儲區(qū)中分別為各變量分配多少字節(jié)?
  VR1 DW10
  VR2 DW 6 DUP(?),66,88
  VR3 DD 10 DUP(?)
  VR4 DB 2DUP(?,8DUP(0))
  VR5 DB ‘Happy New Year!’

答案

VR1,VR2,VR3,VR4,VR5分別分配字節(jié)個數(shù)為:20,16,40,18,15。
18 對于給定的符號定義,指出下列指令的錯誤,說明原因。
  A EQU 505
  B DB ?
  C DB 64H
  (1) MOV A,AX;(2) MOV B,AX;(3) MOV AX,B
  (4) CMP C,AX;(5) CMP A,C; (6) CMP AX,C

答案

 (1) 錯。因變量A已通過EQU偽指令賦值為505,故不能再用傳送指令MOV對其賦值。
   (2) 錯。類型不匹配,變量B為字節(jié)型,AX為字型。
   (3) 錯。類型不匹配。
   (4) 錯。類型不匹配,C為字節(jié)型,AX為字型。
   (5) 錯。源操作數(shù)和目的操作數(shù)不能同位存儲器類型,且類型也不匹配。
   (6) 錯。類型不匹配。
19 對于給定的數(shù)據(jù)定義,各條MOV指令單獨執(zhí)行后有關寄存器的內容是什么?
  K1 DB ?
  K2 DB 8 DUP(?)
  K3 DW 6 DUP(?)
  K4 DW ‘1234’
  (1) MOV AX TYPE K1
  (2) MOV AX,TYPE K3
  (3) MOV CL,LENGTH K2
  (4) MOV CX,LENGTH K3
  (5) MOV CX,LENGTH K4
  (6) MOV DX SIZE K3

答案

(1) (AX)=0001H TYPE是存儲單元類型,字節(jié)型為1,字型為2,雙字為4;
   (2) (AX)=0002H LENGTH是存儲區(qū)的單元數(shù)目,單元可以是字節(jié)、字或者雙字;
   (3) (CL)=08H SIZE存儲區(qū)的字節(jié)數(shù)。
   (4) (CX)=0006H
   (5) (CX)=0004H
   (6) (DX)=000CH
20 對于給定的數(shù)據(jù)定義,變量R1和R2的值分別是多少?
  (1) A1 DB 1,2,3 ‘ABC’
    A2 DB 0
    R1 EQU A2-A1
  (2) K1 DW ?
    K2 DB 6 DUP(?)
    K3 DD ?
    R2 EQU $-K1

答案

 (1) R1=6 $表示地址計數(shù)器的值
   (2) R2=22
21 寫出完成下述要求的變量定義語句:
  (1) 為某緩沖區(qū)BUG留出200各字節(jié)的內存空間;
  (2) 將字符串‘BYTE’,‘WORD’,‘DWORD’存放于某數(shù)據(jù)區(qū);
  (3) 在某數(shù)據(jù)區(qū)要求存入下列5個數(shù)據(jù):
    2040H,0300H,10H,0200H,1048H

答案

(1) BUG DB 200DUP(?)
(2) STR1 DB ‘BYTE’
    STR2 DB ‘WORD’
    STR3 DB ‘DWORD’
(3) DATA DW 2040H,0300H,10H,0200H,1048H
22 分別說明下列指令對的區(qū)別:
  (1) MOV AX,VAR1和MOV AX OFFSET VAR1
  (2) MOV AX,VAR1與LEA AX,VAR1

答案

(1) MOV AX,VAR1是將變量VAR1的內容送AX;
     MOV AX,OFFSET VAR1是將變量VAR1的偏移量送AX。
   (2) LEA AX,VAR1也是將變量VAR1的偏移量送AX,與(1)中不同的是采用專門取偏移量指令實現(xiàn)。
23 說明為什么有時候必須使用PTR屬性操作符。

答案

PTR優(yōu)先于隱含的類型屬性,指定操作數(shù)的類型屬性。因為在許多情況下,所使用的操作符類型與原指定的類型不同,又不希望改變原有的設定,只暫時改變操作符類型,則必須使用PTR屬性操作符作為臨時設定,這個臨時設定類型只在本條指令有效。
24 假設VDT1和VDT2為字變量,TAL1和TAL2為標號,說明下列指令是否正確,若正確,說明其尋址方式;若有錯誤指出錯誤所在。
  (1) JMP VDT1 (2) JMP NEAR TAL1 (3) JNZ VDT2 
  (4) JE TAL2 (5) JMP FAR PTR TAL1 (6) JMP TAL1[SI]

答案

(1) 錯。條轉地址應為標號,而非變量。
   (2) 錯。指令中缺少PTR.
   (3) 錯。條轉地址應為標號,而非變量。
   (4) 正確。相對尋址方式。
   (5) 正確。直接需尋址方式。
   (6) 正確。相對尋址方式。

?
乐清市| 明溪县| 迭部县| 历史| 龙南县| 和平县| 缙云县| 鹤庆县| 安远县| 新昌县| 大田县| 定边县| 揭东县| 高阳县| 马龙县| 额尔古纳市| 霍林郭勒市| 汉寿县| 龙门县| 平定县| 剑河县| 明光市| 迭部县| 贵溪市| 襄汾县| 靖西县| 阿拉善左旗| 肥乡县| 金坛市| 三江| 灌云县| 惠安县| 东明县| 汪清县| 新竹市| 连城县| 体育| 喀喇沁旗| 确山县| 宣恩县| 阳山县|