精品午夜福利中文字av_国产成人综合网_av毛片免费观看网站_欧美影视国产综合_野花香视频中文免费观看_亚洲无码要在线视频_又粗又大又用力大交换好大好爽小静_欧美贵妇v办公室高跟鞋_亚洲国产高清a∨网站_免费中文少妇亚洲

知ing

微機原理及應(yīng)用(第二版)

陳繼紅 徐晨 王春明 徐慧 編著 / 高等教育出版社

???╰★佪眸┅笑★ 上傳

查看本書

第4章?匯編語言程序設(shè)計?習題答案(部分)


4.1 什么是標號?它有哪些屬性?

答:標號是一種特殊的標識符,它代表代碼段中的某個具體位置,它主要用于表明

轉(zhuǎn)移的目標位置。源程序中的標號都有三種屬性:段、偏移及類型。

4.2 什么是變量?它有哪些屬性?

答:變量名代表存儲器中的一個數(shù)據(jù)區(qū)的名字。源程序中的變量有五種屬性:段、偏

移、類型、長度、規(guī)模。

4.3 什么是偽指令?什么是宏指令?偽指令在什么時候被執(zhí)行?宏指令在程序中如何

被調(diào)用?

答:偽指令語句是一種不產(chǎn)生目標代碼的語句,它僅僅在匯編過程中告訴匯編程序應(yīng)

如何匯編。偽指令語句是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作。

宏是若干語句組成的程序段,宏指令語句用來定義宏。一旦把某程序段定義成宏,則可

以用宏名代替那段程序。在匯編時,要對宏進行宏展開,展開的過程是將宏名用程序段代替。

4.4 匯編語言表達式中有哪些運算符?它們所完成的運算是在什么時候進行的?

答:匯編語言表達式中的運算符有:

算術(shù)運算符?+、-、*、/、MOD

邏輯運算符?ANDOR、NOTXOR

關(guān)系運算符?EQ、NE、LT、GT、LT、LEGE

分析運算符?SEG、OFFSETTYPE、LENGTHSIZE

屬性運算符?PTR、THISSHORT

??LOW、HIGH

這些運算符都是在在匯編時由匯編程序?qū)ζ溥\算的。

4.5 畫出下列語句中的數(shù)據(jù)在存儲器中的存儲情況。

ORG 100H

VARB DB 34,34H‘GOOD’,2 DUP1,2 DUP0))

VARW DW 5678H,‘CD’$+2,2 DUP100

VARC EQU 12

VARB DS:0100H 22H DS:010BH 00H

DS:0101H 34H VARW DS:010CH 78H

DS:0102H 47H DS:010DH 56H

DS:0103H 4FH DS:010EH 44H

DS:0104H 4FH DS:010FH 43H

DS:0105H 44H DS:0110H 12H

DS:0106H 01H DS:0111H 01H

DS:0107H 00H DS:0112H 64H

DS:0108H 00H DS:0113H 00H

DS:0109H 01H DS:0114H 64H

DS:010AH 00H DS:0115H 00H

46 按下列要求,寫出各數(shù)據(jù)定義語句。

DB1 10H 個重復(fù)的字節(jié)數(shù)據(jù)序列:1,2,5 34。

DB2 為字符串‘STUDENTS’

DB3 為十六進制數(shù)序列:12H,ABCDH

用等值語句給符號COUNT 賦以DB1 數(shù)據(jù)區(qū)所占字節(jié)數(shù),該語句寫在最后。

解答:

DB1 DB 16 DUP12,5 DUP3),4

DB2 DB ‘STUDENTS’

DB3 DW 12H,0ABCDH

COUNT EQU DB2DB1

4.7 指令OR AX,1234H OR 0FFH 中兩個OR 有什么差別?這兩個操作數(shù)分別在什么時

候執(zhí)行?

解答:(1)指令OR AX,1234H OR 0FFH 中的第一個OR 是指令系統(tǒng)中的指令,而

第二個OR 是表達式中表示邏輯關(guān)系的。(2)指令OR AX,1234H OR 0FFH 中的第一個

OR 是在CPU 執(zhí)行指令操作時才會執(zhí)行。而第二個OR 是在匯編時就會將1234H 0FFH

邏輯運算,得到結(jié)果12FFH。然后執(zhí)行第一個OR 指令,完成AX 的內(nèi)容與12FFH

邏輯運算。

48 對于下面的數(shù)據(jù)定義,各條MOV 指令單獨執(zhí)行后,有關(guān)寄存器的內(nèi)容是什么?

PREP DB ?

TABA DW 5 DUP(?)

TABB DB ‘NEXT’

TABC DD 12345678H

1MOV AX,TYPE PREP ;AX=1

2MOV AX,TYPE TABA ;AX=2

3MOV AX,LENGTH TABA ;AX=5

4MOV AX,SIZE TABA AX=10

5MOV AX,LENGTH TABB AX=1

6MOV DX,SIZE TABC AX=4

4.9 設(shè)數(shù)據(jù)段DSEG 中符號及數(shù)據(jù)定義如下,試寫出數(shù)據(jù)在內(nèi)存中的存儲示意圖。

(數(shù)據(jù)段DSEG 定義略)

解答:

DAB DS:0100H 2FH DS:0113H

DS:0101H 47H DS:0114H

DS:0102H 4FH DS:0115H

DS:0103H 54H DS:0116H

DS:0104H 4FH DS:0117H

DS:0105H 2FH DS:0118H

DS:0106H 0DH DS:0119H

DS:0107H 0AH DS:011AH

DBB DS:0108H 05H DS:011BH

DS:0109H 13H DDW DS:011CH 32H

DS:010AH 61H DS:011DH 31H

CCB DS:010BH DS:011EH 64H

DS:010CH DS:011FH 00H

DS:010DH DS:0120H 33H

DS:010EH DS:0121H 03H

DS:010FH DS:0122H 78H

DS:0110H DS:0123H 00H

DS:0111H DS:0124H 64H

DS:0112H DS:0125H 00H

4.10 若自STRING 單元開始存放有一個字符串(以字符‘$’結(jié)束),試完成:

1)編程統(tǒng)計該字符串長度(不包含?$ 字符,并假設(shè)長度為兩字節(jié))。

2)把字符串長度放在STRING 單元,把整個字符串往下移兩個單元。

程序段為:

1

MOV SI, OFFSET STRING

XOR BX, BX

CONT:MOV AL, [SI]

CMP AL, ‘$’

JZ NEXT

INC BX

INC SI

JMP CONT

NEXT:MOV AH, 4CH

INT 21H

2STRING DB ‘ $’

COUNT EQU $-STRING

MOV SI, OFFSET STRING

MOV CX, COUNT

ADD SI, CX

CONT: DEC SI

MOV AL, [SI]

MOV [SI+2], AL

LOOP CONT

MOV CX, COUNT

MOV STRING, CX

MOV AH, 4CH

INT 21H

4.11 將字符串STRING 中的‘&’字符用空格代替,字符串STRING“It is FEB&03”

解答程序為:

DATA SEGMENT

STRING DB ‘It is FEB&03’

COUNT EQU $-STRING

DATA ENDS

CODE SEGMENT

ASSUME CSCODE,DSDATA

STARTMOV AX,DATA

MOV DSAX

MOV SI,OFFSET STRING

MOV CXCOUNT

MOV AL,‘$’

CONTCMP AL,[SI]

JNZ NEXT

MOV BYTE PTR[SI],‘ ’

NEXT?INC SI

LOOP CONT

MOV AH,4CH

INT 21H

CODE ENDS

END START

4.15?試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。

解答程序為:

data segment

message db 'please enter the small letter:',0ah,0dh,'$'

message2 db 'the capital letter is:',0ah,0dh,'$'

error db 'enter must be small!please enter again:',0ah,0dh,'$'

message3 db 'the capital letter is:','$'

letter db ?

data ends

stack segment

db 100h dup(?)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start:mov ax,data

mov ds,ax

jmp l1

xor ax,ax

error1:lea dx,error

mov ah,09h

int 21h

l1:lea dx,message

mov ah,09h

int 21h

lea dx,letter

mov ah,01h

int 21h

push ax

mov dl,0ah

mov ah,02h

int 21h

mov dl,0dh

int 21h

lea dx,message3

mov ah,09h

int 21h

pop ax

cmp al,'z' ;比較,判斷是否小寫字母

ja error1

cmp al,'a'

jb error1 ;大寫字母重新輸入

sub al,20H ;20H 轉(zhuǎn)換為大寫字母

mov dl,al

mov ah,02h

int 21h

mov ax,4c00h

int 21h

code ends

end start

416?鍵盤輸入十個學生的成績,試編制一個程序統(tǒng)計69~69 分,70~79 分,80~89 分,

90~99 分及100 分的人數(shù),分別存放到S6,S7S8,S9 S10 單元中。

解答程序為:

DATA SEGMENT

BUF DB 10 DUP(?)

S6 DB ?

S7 DB ?

S8 DB ?

S9 DB ?

S10 DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV SI,OFFSET S6

XOR AL,AL

MOV CX,0504H

CONT: MOV [SI],AL

INC SI

LOOP CONT

MOV CX,10

MOV SI,OFFSET BUF

CONT1: MOV AH,1

INT 21H

SHL AL,CL

MOV BL,AL

MOV AH,1

INT 21H

SUB AL,30H

OR AL,BL

MOV [SI],AL

CMP AL,70H

JAE NEXT1

INC BYTE PTR S6

NEXT1: CMP AL,80H

JAE NEXT2

INC BYTE PTR S7

NEXT2: CMP AL,90H

JAE NEXT3

INC BYTE PTR S8

NEXT3: CMP AL,99H

JA NEXT4

INC BYTE PTR S9

JMP NEXT5

NEXT4: INC BYTE PTR S10

NEXT5: INC SI

LOOP CONT1

MOV AH,4CH

INT 21H

CODE ENDS

END START


查看更多