自动控制理论皱伯敏版本第4章作业答案

  • 格式:doc
  • 大小:46.50 KB
  • 文档页数:5

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.52 比较AX和BX中两个无符号数的大小,若AX>BX,则将SI中的高8位和低8位交换;若AX=BX,则将SI中的高7位置1;若AX

CODE SEGMENT

ASSUME CS:CODE

START: CMP AX,BX

JZ A1 ;若AX=BX,转移到A1

JB A2 ;若AX

MOV CL,8 ;交换SI中高8位和低8位

ROL SI,CL

JMP NEXT

A1:OR SI,0FE00H;将SI中的高7位置1

JMP NEXT

A2:MOV CX,2;将SI中的带符号数除以2

MOV AX,SI;将被除数送给DX:AX

CWD

IDIV CX

MOV SI,AX;将所求结果送回SI

NEXT:MOV AH,4CH

INT 21H

CODE ENDS

END START

3.53 在以DS:3301H为首地址的存储单元中,连续存放了50个无符号的字节数据,要求在其中找出最小值,并将它放在地址为DS:3300H的字节单元中。试编写程序。

CODE SEGMENT

ASSUME CS:CODE

START: MOV SI,3301H;将首地址送给SI,用SI可以间接访问数组中的元素MOV AL,[SI];将第一个数送给AL

MOV CX,49;50个数比较49次

CYCLE: INC SI;让SI指向下一个数

CMP AL,[SI]

JBE NEXT;AL<=[SI],则判断下一个数

MOV AL,[SI];AL>[SI],则用[SI]取代AL

NEXT:LOOP CYCLE

MOV DS:[3300H],AL ;编译器会认为[3300H]就是3300H,故在前面加DS:

MOV AH,4CH

INT 21H

CODE ENDS

END START

3.58 编写将内存以ES:1000H开始的256个字节单元清零的程序。

CODE SEGMENT

ASSUME CS:CODE

START: MOV SI,1000H

MOV CX,256

CYCLE:MOV ES:[SI],BYTE PTR 0

INC SI

LOOP CYCLE

MOV AH,4CH

INT 21H

CODE ENDS

END START

用串操作指令实现:

CODE SEGMENT

ASSUME CS:CODE

START: MOV DI,1000H;给目的串首地址赋初值

MOV AL,0;用0来初始化

MOV CX,256;循环256次

CLD;地址从小到大变化

REP STOSB;用AL中的值对指定的目的串初始化

MOV AH,4CH

INT 21H

CODE ENDS

END START

3.59 试编写程序,统计以DS:8000H为起始地址的连续200个字节单元中的0的个数。CODE SEGMENT

ASSUME CS:CODE

START: MOV AX,0 ;用AX统计0的个数

MOV CX,200;循环200次

MOV SI,8000H;通过SI间接访问内存DS:8000H开始的存储单元CYCLE: CMP BYTE PTR [SI],0

JNZ NEXT

INC AX

NEXT:INC SI

LOOP CYCLE

MOV AH,4CH

INT 21H

CODE ENDS

END START

4.5 程序中数据定义如下:

DATA1 DW ?

DATA2 DB 32 DUP(?)

DATA3 DD ?

DLENGTH EQU $-DATA1

试问DLENGTH的值是多少?

DLENGTH=38

4.6 在某程序中需要为一个变量BUF预留500个字节的存储空间,请写出相应的指令,如果要预留500个字的存储空间呢?

BUF DB 500 DUP(?)

BUF DW 500 DUP(?)

4.7 程序中数据定义如下:

BUFFERB DB ‘ABCDEF’

RESULT DB ?

BUFFERW DW 30 DUP(?)

写出以下指令的执行结果:

MOV AX, TYPE RESULT ; AX=1

MOV BX, TYPE BUFFERW ; BX=2

MOV CX, LENGTH BUFFERB ; CX=1

MOV DX, LENGTH BUFFERW ; DX=30

MOV AX, SIZE RESULT ; AX=1

MOV BX, SIZE BUFFERW ; BX=60

4.11 设BX=1103H,则执行下列指令后AX和CX各为多少?若BX=03H,则结果又如何?MOV AX, BX AND 0FFH

MOV CX, BX EQ 1103H

BX=1103H

AX=0003H,CX=0FFFFH

BX=03H

AX=0003H,CX=0

4.13 两个ASCII码数串定义如下:

STR1 DB ‘352678’

STR2 DB ‘123400’

编写程序段,计算STR1+STR2,要求结果仍然是ASCII码串。

DATA SEGMENT

STR1 DB '352678'

STR2 DB '123400'

STR DB 6 DUP (?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

LEA SI,STR1+5 ;SI指向STR1的最后一个元素

LEA DI,STR2+5 ;DI指向STR2的最后一个元素

LEA BX,STR+5 ;BX指向STR的最后一个元素

MOV CX,6 ;循环6次

CLC ;初始认为最低位没有进位

CYCLE: MOV AL,[SI]

MOV AH,[DI]

ADC AL,AH ;将对应的两个ASCII码相加

AAA ;修正,仅仅取运算结果的低4位

RCR DX,1 ;保护进位标志

OR AL,30H ;将所有的数值转换为对应的ASCII码

SHL DX,1 ;恢复进位标志

MOV [BX],AL ;将所求的ASCII码送给STR的相应元素