微机原理第四五六章作业文档格式.docx
《微机原理第四五六章作业文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理第四五六章作业文档格式.docx(23页珍藏版)》请在冰点文库上搜索。
CDSEG,DS:
DTSEG,SS:
STAKSG
START:
AX,DTSEG
MOV
DS,AX
AL,34H
ADD
AL,4FH
DATA1,AL
AH,4CH
INT
21H
CDSEG
END
S
4.3.
将下列文件类型填入空格:
(1).obj
(2).exe
(3).crf
(4).asm
(5).lst
(6).map
编辑程序输出的文件有________________;
汇编程序输出的文件有________________;
连接程序输出的文件有________________。
编辑程序输出文件:
(4)
汇编程序输出文件:
(1),(3),(5)
连接程序输出文件:
(2),(6)
4.4
下面的数据项定义了多少个字节?
DATA_1
6DUP(4DUP(0FFH))
24字节
4.5.
对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?
为什么?
SEGMENT
|
ORG
10H
10H
72H
DW
7204H
04H
ENDS
|
不一样.分别是72H,04H和04H,72H.存储字时低8位存在低字节,高8位存在高字节.
4.6.
下面的数据项设置了多少个字节?
(1)ASC_DATA
'
1234'
(2)HEX_DATA
1234H
(1)设置了4个字节
(2)设置了2个字节
4.7.
执行下列指令后,AX寄存器中的内容是什么?
TABLE
10,20,30,40,50
ENTRY
3
.
BX,OFFSETTABLE
BX,ENTRY
AX,[BX]
(AX)=40
4.8.
分析下列程序的功能,写出堆栈最满时各单元的地址及内容。
SSEG
SEGMENT
STACK'
AT
1000H
;
堆栈的段地址为1000H
128DUP(?
TOS
LABEL
WORD
;
-------------------------------------------
DSEG
32DUP(?
CSEG
ASSUME
CS:
CSEG,DSSEG,SS:
SSEG
AX,SSEG
SS,AX
AX,DSEG
DS,AX
AX,4321H
CALL
HTOA
RETN:
AH,4CH
INT
HTOA
NEAR
CMP
AX,15
JLE
B1
PUSH
AX
BP
BP,SP
BX,[BP+2]
AND
BX,0FH
[BP+2],BX
POP
CL,4
SHR
AX,CL
B1:
B2:
AL,30H
JL
PRT
AL,07
PRT:
DL,AL
AH,2
RET
-----------------------------------------
END
START
1000:
0F2H
B1
0F4H
3
0F6H
0F8H
2
0FAH
0FCH
1
0FEH
RETN
100H
4.9下面是将内存一字节数据高4位和低4位互换并放回原位置的程序,找出错误并改正。
DATASEGMENT
DD1DB23H
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,OFFSETDD1
MOVAL,[SI]
MOVCL,4
RCRAL,CL
MOV[SI],AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
【解答】程序第8行错误:
LEASI,OFFSETDD1,应去掉OFFSET;
程序第10行错误:
RCRAL,CL,应使用ROR或ROL,改为RORAL,CL
4.10
编写程序,比较两个字符串STRING1和STRING2所含字符是否完全相同,若相同则显示"
MATCH"
,若不同则显示"
NOMATCH"
。
datarea
segment
string1
db
asfioa'
string2
xcviyoaf'
mess1
MATCH'
'
$'
mess2
NOMATCH'
datarea
ends
prognam
segment
assumecs:
prognam,ds:
datarea
main
proc
far
start:
push
ds
sub
ax,ax
push
ax
mov
ax,datarea
ds,ax
es,ax
begin:
mov
cx,string2-string1
bx,mess1-string2
cmp
bx,cx
jnz
dispno
lea
dx,addr
si,string1
di,string2
repe
cmpsb
jne
ah,9
lea
dx,mess1
int
21h
ret
dispno:
ah,9
dx,mess2
int
ret
main
endp
prognam
end
start
4.11根据字节变量control中的各位被置位情况控制程序转移到8个远过程中的一个。
【解答】
SUBSTABLEDWSUBR1
DWSUBR2
DWSUBR3
DWSUBR4
DWSUBR5
DWSUBR6
DWSUBR7
DWSUBR8
CONTROLDB40H
SS_SEGSEGMENTSTACK
DB100DUP(0)
SS_SEGENDS
ASSUMECS:
CODE,DS:
DATA,SS:
SS_SEG
MAINPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETSUBSTABLE
MOVAL,CONTROL
DIVERT:
RCRAL,1
JCGETAG
ADDBX,2
JMPSHORTDIVERT
GETAG:
CALL[BX]
RET
MAINENDP
SUBR1PROC
…………
RET
SUBR1ENDP
SUBR8PROC
SUBR8ENDP
ENDMAIN
4.12编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。
加密表为;
输入数字:
0,1,2,3,4,5,6,7,8,9
密码数字:
7,5,9,1,3,6,8,0,2,4
Datasegment
scode
7,5,9,1,3,6,8,0,2,4
buffer
10dup(?
Dataends
Codesegment
ax,Data
si,0
cx,10
bx,scode
input:
ah,01
cmp
al,0ah
jz
exit
and
al,0fh
xlat
buffer[si],al
inc
si
loop
input
exit:
movah,4ch
int21h
Codeends
Endstart
4.13从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。
BLOCKDB100DUP(?
COUNTDB?
ASSUMEDS:
DATA,CS:
CODE
MOVAX,DATA
MOVDS,AX
MOVDL,0
LEASI,BLOCK
LP:
MOVAH,1
CMPAL,0DH
JZEXIT
MOV[SI],AL
CMPAL,30H
JAENEXT
CMPAL,39H
JBENEXT
INCDL
NEXT:
INCSI
JMPLP
EXIT:
MOVCOUNT,DL
INT21H
4.14请用16进制和10进制分别显示内存单元中一个字节的有符号数。
DATA1DB088H
DATA2DB4DUP(0)
STACKSEGMENTSTACK
DB100DUP(?
STACKENDS
STACK
MAINPROCFAR
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
HEXN:
MOVAL,DATA1
MOVCL,4
SHRAL,CL
CALLDISPL1
MOVAL,DATA1
ANDAL,0FH
DECN:
MOVAL,DATA1
SHLAL,1
JNCEEE
MOVDL,'
-'
MOVAH,2
NEGAL
JMPDECN0
EEE:
DECN0:
LEABX,DATA2
XORSI,SI
MOVDL,10
DECN1:
XORAH,AH
DIVDL
MOV[BX+SI],AH
ANDAL,0FFH
JZAAA
JMPDECN1
AAA:
DECSI
JZBBB
MOVAL,BYTEPTR[BX+SI]
JMPAAA
BBB:
MOVAL,BYTEPTR[BX]
CALLDISPL1
MAINENDP
DISPL1PROC
ADDAL,30H
CMPAL,39H
JNACCC
ADDAL,07H
CCC:
MOVDL,AL
POPAX
DISPL1ENDP
4.15在数据段中以buffer单元开始连续存放10个8位二进制无符号数,将其中最大数找出来,存于max单元中,试编程。
datasegment
bufferdb27,17,100,65,12,36,79,41,88,3
maxdb?
dataends
ss_segsegmentstack
db100dup(0)
ss_segends
codesegment
assumecs:
code,ds:
data,ss:
ss_seg
mainprocfar
movax,data
movds,ax
movcx,9
movbx,0
moval,buffer[bx]
main1:
addbx,2
cmpal,buffer[bx]
jgenext
moval,buffer[bx]
next:
loopmain1
movmax,al
movax,4c00h
int21h
mainendp
codeends
endmain
4.16在数据段longdata中存放32位二进制无符号数(低位在前),将该变量以16进制形式显示输出,试编程。
LONGDATADD0123ABC