汇编课后答案 联系客服

发布时间 : 星期六 文章汇编课后答案更新完毕开始阅读332257260722192e4536f632

〔习题3.7〕将第2章习题2.37采用完整段定义格式编写成一个完整的源程序。

〔解答〕 ;xt307.asm stack segment dw 512 dup(?)

stack ends data segment array db 255 db 0 array1 db 255 dup('$') array2 db 0dh,0ah,'$'

data ends code segment 'code' assume cs:code, ds:data, ss:stack

start: mov ax,data mov ds,ax

mov ah,0ah ; 键盘输入字符串

mov dx,offset array

int 21h

mov dx,offset array2 ; 回车换行

mov ah,09h int 21h

mov bx,offset array1

again: mov al,[bx] cmp al,'$' jz done

cmp al,'a' ; 小于a和大于z的字符不是小写字母

jb next cmp al,'z' ja next

sub al,20h ; 在a和z之间的字符才是小写字母,转换为大写

mov [bx],al ; 保存到原位置

next: inc bx jmp again done: mov dx,offset array1

mov ah,09h int 21h mov ax,4c00h

int 21h code ends end start

〔习题3.8〕区分下列概念:

(1)变量和标号

(2)数值表达式和地址表达式 (3)符号常量和字符串常量

〔解答〕

(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单

元,表示其存储内容的逻辑地址。

(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及

利用各种的操作符形成的表达式。

(3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被

一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。

〔习题3.9〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误

原因。

(1) mov byte ptr [bx],1000 (2) mov bx,offset myword[si] (3) cmp mybyte1,mybyte2 (4) mov al,mybyte1+mybyte2

(5) sub al,myword (6) jnz myword

〔解答〕

(1)1000超出了一个字节范围

(2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改

为lea bx,myword[si]

(3)两个都是存储单元,指令不允许

(4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式

〔习题3.10〕OPR1是一个常量,问下列语句中两个AND操作有什么区别?

AND AL,OPR1 AND 0feh

〔解答〕

前者为“与”操作硬指令助记符,可汇编成机器代码。 后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。

〔习题3.11〕给出下列语句中,指令立即数(数值表达式)的值:

(1) mov al,23h AND 45h OR 67h

(2) mov ax,1234h/16+10h (3) mov ax,NOT(65535 XOR 1234h) (4) mov al,LOW 1234h OR HIGH 5678h

(5) mov ax,23h SHL 4 (6) mov ax,1234h SHR 6 (7) mov al,?a? AND (NOT(?a?-?A?)) (8) mov al,?H? OR 00100000b (9) mov ax,(76543 LT 32768) XOR 7654h

〔解答〕

注:对于逻辑运算,有关操作数可化为二进制数。

(1)67h (2)133h (3)1234h (4)76h (5)0234h (6)0048h

(7)41h (8)68h (9)7654h

〔习题3.12〕为第2章例题2.54定义变量count、block、dplus和dminus。

〔解答〕

假设block开始的数据块有32个字节数据:16个正数+100 (64h)、16个负数 -48 (0d0h)

分别连续分布:

block db 16 dup(100),16 dup(-48) ;也可以是任意字节数据,随意分布。

dplus db 32 dup(?) ;为正数预留存储空间 dminus db 32 dup(?) ;为负数预留存储空间

count equ 32 ;字节数

〔习题3.13〕为第2章例题2.55定义相应变量,并形成一个完整的汇编语言程序。

〔解答〕 ;lt239b.asm .model small

.stack .data

string1 db 'good morning !' ;两字符串可相同或不同,但字符数要求相同。

string2 db 'Good morning !' result db ? ;预留结果字节 count = 14 ;字符数

.code .startup

mov ax,ds ;所有数据在同一个段,所以使es=ds

mov es,ax mov si,offset string1 mov di,offset string2

mov cx,count again: cmpsb