第6次作业练习题(第四章:汇编语言程序设计)

该文主要涉及汇编语言的程序执行和数据操作。包括程序中数据段的定义,如DATA1、DATA2和STRING的处理;指令执行的结果,如MOVAL,DATA1、MOVBX,OFFSETDATA2等;中断向量的设置,如将中断类型码为10H的中断服务子程序MYINT的向量放入向量表;以及使用冒泡排序算法对内存MEM1中的10个无符号数进行降序排列的程序实现。
摘要由CSDN通过智能技术生成

1. 主观题 (20分)

若程序的数据段定义如下,写出各指令语句独立执行后的结果。

DSEG SEGMENT
    DATA1 DB 10H, 20H, 30H
    DATA2 DW 10 DUP(?)
    STRING DB ‘123’
DSEG ENDS

    MOV AL, DATA1         ; (1)
    MOV BX, OFFSET DATA2  ; (2)
    LEA SI, STRING        ; (3)
    MOV DI, WORD PTR DATA1
    ADD DI, SI

我的答案

DSEG SEGMENT
    DATA1 DB 10H, 20H, 30H
    DATA2 DW 10 DUP(?)
    STRING DB ‘123’
DSEG ENDS

    MOV AL, DATA1           ; AL=10H
    MOV BX, OFFSET DATA2    ; BX=0003H
    LEA SI, STRING          ; SI=0017H
    MOV DI, WORD PTR DATA1  ; DI=2010H
    ADD DI, SI              ; DI=2027H

2. 主观题 (10分)

(易错)执行下列指令后,AX 寄存器的内容是多少?

TABLE DW 10, 20, 30, 40, 50
ENTRY DW 3

MOV BX, OFFSET TABLE
ADD BX, ENTRY
MOV AX, [BX]

我的答案

TABLE DW 10, 20, 30, 40, 50
ENTRY DW 3

MOV BX, OFFSET TABLE
ADD BX, ENTRY
MOV AX, [BX]    ; 1E00H

分析过程

3. 主观题 (30分)

请完成将中断类型码为 10H 的某中断服务子程序 MYINT 的中断向量放入向量表的程序段。

我的答案

MOV AX, 0000H
MOV DS, AX

MOV SI, 10H*4    ; 不要自作聪明算出来,这可是16进制乘法

MOV BX, OFFSET MYINT
MOV [SI], BX

MOV BX, SEG MYINT
MOV [SI+2], BX

4. 主观题 (40分)

编程实现将下列 MEM1 单元中的 10 个无符号数按从大到小的顺序进行重新排列。

DSEG SEGMENT
    MEM1 DW 1000H, 1001H, 1002H, 1007H, 1008H
         DW 1009H, 1003H, 1004H, 1005H, 1006H
DSEG ENDS

我的答案

DSEG SEGMENT
    MEM1 DW 1000H, 1001H, 1002H, 1007H, 1008H
         DW 1009H, 1003H, 1004H, 1005H, 1006H
DSEG ENDS
SSEG SEGMENT STACK
    DB 100H DUP(0)
SSEG ENDS
CSEG SEGMENT
    ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START:
    MOV AX, DSEG
    MOV DS, AX

    ; 使用冒泡排序法
    MOV DX, 10

    ; 外层循环
LOP1:
    MOV CX, 9
    MOV SI, OFFSET MEM1

    ; 内层循环
LOP2:
    MOV BX, [SI]
    ADD SI, 2

    CMP BX, [SI]
    JAE BIGGER
    ; 若前一个数小于后一个数,则交换
    MOV AX, BX
    MOV BX, [SI]
    MOV [SI], AX

BIGGER: DEC CX
    JNZ LOP2

    DEC DX
    JNZ LOP1

    MOV AH, 4CH
    INT 21H
CSEG ENDS
    END START

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值