微机原理第四五六章作业.docx

上传人:b****4 文档编号:3655856 上传时间:2022-11-24 格式:DOCX 页数:23 大小:145.84KB
下载 相关 举报
微机原理第四五六章作业.docx_第1页
第1页 / 共23页
微机原理第四五六章作业.docx_第2页
第2页 / 共23页
微机原理第四五六章作业.docx_第3页
第3页 / 共23页
微机原理第四五六章作业.docx_第4页
第4页 / 共23页
微机原理第四五六章作业.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

微机原理第四五六章作业.docx

《微机原理第四五六章作业.docx》由会员分享,可在线阅读,更多相关《微机原理第四五六章作业.docx(23页珍藏版)》请在冰豆网上搜索。

微机原理第四五六章作业.docx

微机原理第四五六章作业

第四章作业答案

4.1分析汇编语言源程序应该由哪些逻辑段组成?

各段的作用是什么?

语句标号和变量应具备哪3种属性?

【解答】汇编语言源程序应该由若干个逻辑段组成,可以有若干个数据段、代码段、堆栈段和附加数据段,至少要有一个代码段。

各段的作用如下:

(1)代码段用来存放程序和常数。

(2)数据段用于数据的保存。

(3)堆栈段用于保护数据,尤其在子程序调用、中断过程中进行现场信息保护。

(4)附加数据段用于数据的保存。

语句标号和变量应具备的3种属性:

段属性、偏移属性和类型属性。

4.2  指出下列程序中的错误:

    STAKSG    SEGMENT

            DB    100DUP(?

    STA_SG    ENDS

    DTSEG    SEGMENT

    DATA1    DB    ?

    DTSEG    END

    CDSEG    SEGMENT

    MAIN    PROC    FAR

    START:

    MOV        DS,DATSEG

            MOV        AL,34H

            ADD        AL,4FH

            MOV        DATA,AL

    START    ENDP

    CDSEG    ENDS

            END

答案:

改正后:

STAKSG    SEGMENT

    DB        100DUP(?

STAKSG    ENDS

DTSEG        SEGMENT

DATA1        DB    ?

DTSEG        ENDS

CDSEG    SEGMENT

MAIN        PROC    FAR

    ASSUMECS:

CDSEG,DS:

DTSEG,SS:

STAKSG

START:

        MOV    AX,DTSEG

MOV    DS,AX

MOV    AL,34H

ADD    AL,4FH

MOV    DATA1,AL

MOV    AH,4CH

INT        21H

MAIN    ENDP

CDSEG    ENDS

        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    DB    6DUP(4DUP(0FFH))

答案:

    24字节

4.5.  对于下面两个数据段,偏移地址为10H和11H的两个字节中的数据是一样的吗?

为什么?

    DTSEG    SEGMENT          |        DTSEG    SEGMENT

    ORG        10H              |        ORG        10H

    DATA1    DB    72H          |     DATA1    DW    7204H

            DB    04H          |        DTSEG    ENDS

    DTSEG    ENDS            |

答案:

不一样.分别是72H,04H和04H,72H.存储字时低8位存在低字节,高8位存在高字节.

4.6.  下面的数据项设置了多少个字节?

    

(1)ASC_DATA    DB    '1234'        

(2)HEX_DATA    DB    1234H

答案:

  

(1)设置了4个字节  

(2)设置了2个字节

4.7.  执行下列指令后,AX寄存器中的内容是什么?

        TABLE    DW    10,20,30,40,50

        ENTRY    DW    3

      .

      .

      .

MOV        BX,OFFSETTABLE

ADD        BX,ENTRY

MOV        AX,[BX]

答案:

  (AX)=40

4.8.  分析下列程序的功能,写出堆栈最满时各单元的地址及内容。

    SSEG    SEGMENT    'STACK'    AT    1000H    ;堆栈的段地址为1000H

            DW        128DUP(?

      TOS        LABEL    WORD

    SSEG        ENDS

;-------------------------------------------

    DSEG    SEGMENT

            DW    32DUP(?

    DSEG    ENDS

;-------------------------------------------

    CSEG    SEGMENT

    MAIN    PROC    FAR

            ASSUME    CS:

CSEG,DSSEG,SS:

SSEG

    START:

    MOV        AX,SSEG

            MOV        SS,AX

            MOV        AX,DSEG

            MOV        DS,AX

            MOV        AX,4321H

            CALL    HTOA

    RETN:

    MOV        AH,4CH

            INT        21H

    MAIN    ENDP

    ;-------------------------------------------

    HTOA    PROC    NEAR

            CMP        AX,15

            JLE        B1

            PUSH    AX

            PUSH    BP

            MOV        BP,SP

            MOV        BX,[BP+2]

            AND        BX,0FH

            MOV        [BP+2],BX

            POP        BP

            MOV        CL,4

            SHR        AX,CL

            CALL    HTOA

    B1:

        POP        AX

    B2:

        ADD        AL,30H

            JL        PRT

            ADD        AL,07

    PRT:

        MOV        DL,AL

            MOV        AH,2

            INT        21H

            RET

    HTOA    ENDP

    CSEG    ENDS

    ;    ;-----------------------------------------

            END        START

答案:

1000:

0F2H

B1

1000:

0F4H

3

1000:

0F6H

B1

1000:

0F8H

2

1000:

0FAH    B1

1000:

0FCH    1

1000:

0FEH    RETN

1000:

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    db    'xcviyoaf'

    mess1    db    'MATCH','$'

    mess2    db    'NOMATCH','$'

datarea    ends

prognam    segment

assumecs:

prognam,ds:

datarea

main proc    far    

start:

push    ds

sub        ax,ax

push    ax

mov        ax,datarea

mov        ds,ax

mov        es,ax

begin:

    mov        cx,string2-string1

    mov        bx,mess1-string2

    cmp        bx,cx

    jnz        dispno

lea        dx,addr

lea        si,string1

lea        di,string2

repe        cmpsb

jne        dispno

    mov        ah,9

    lea        dx,mess1

int        21h

    ret

dispno:

    mov        ah,9

    lea        dx,mess2

    int        21h

ret

main        endp

prognam        ends

            end    start

4.11根据字节变量control中的各位被置位情况控制程序转移到8个远过程中的一个。

【解答】

DATASEGMENT

SUBSTABLEDWSUBR1

DWSUBR2

DWSUBR3

DWSUBR4

DWSUBR5

DWSUBR6

DWSUBR7

DWSUBR8

CONTROLDB40H

DATAENDS

SS_SEGSEGMENTSTACK

DB100DUP(0)

SS_SEGENDS

CODESEGMENT

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

…………

RET

SUBR8ENDP

CODEENDS

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    db    7,5,9,1,3,6,8,0,2,4

buffer    db    10dup(?

Dataends

Codesegment

assumecs:

prognam,ds:

datarea

start:

mov   ax,Data

mov  ds,ax

 mov  si,0

 mov   cx,10

 lea   bx,scode

input:

 mov   ah,01

 int   21h

 cmp   al,0ah

jz   exit

and   al,0fh

xlat

mov  buffer[si],al

inc    si

loop   input

exit:

movah,4ch

int21h

Codeends

Endstart

4.13从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。

【解答】

DATASEGMENT

BLOCKDB100DUP(?

COUNTDB?

DATAENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

MOVDL,0

LEASI,BLOCK

LP:

MOVAH,1

INT21H

CMPAL,0DH

JZEXIT

MOV[SI],AL

CMPAL,30H

JAENEXT

CMPAL,39H

JBENEXT

INCDL

NEXT:

INCSI

JMPLP

EXIT:

MOVCOUNT,DL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

4.14请用16进制和10进制分别显示内存单元中一个字节的有符号数。

【解答】

DATASEGMENT

DATA1DB088H

DATA2DB4DUP(0)

DATAENDS

STACKSEGMENTSTACK

DB100DUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

MAINPROCFAR

PUSHDS

XORAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

HEXN:

MOVAL,DATA1

MOVCL,4

SHRAL,CL

CALLDISPL1

MOVAL,DATA1

ANDAL,0FH

CALLDISPL1

DECN:

MOVAL,DATA1

SHLAL,1

JNCEEE

MOVDL,'-'

MOVAH,2

INT21H

MOVAL,DATA1

NEGAL

JMPDECN0

EEE:

MOVAL,DATA1

DECN0:

LEABX,DATA2

XORSI,SI

MOVDL,10

DECN1:

XORAH,AH

DIVDL

MOV[BX+SI],AH

INCSI

ANDAL,0FFH

JZAAA

JMPDECN1

AAA:

DECSI

JZBBB

MOVAL,BYTEPTR[BX+SI]

CALLDISPL1

JMPAAA

BBB:

MOVAL,BYTEPTR[BX]

CALLDISPL1

RET

MAINENDP

DISPL1PROC

PUSHAX

ADDAL,30H

CMPAL,39H

JNACCC

ADDAL,07H

CCC:

MOVDL,AL

MOVAH,2

INT21H

POPAX

RET

DISPL1ENDP

CODEENDS

ENDMAIN

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进制形式显示输出,试编程。

【解答】

DATASEGMENT

LONGDATADD0123ABC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1