code segment
assume cs:code,ds:data .386p start:
mov ax,data mov ds,ax mov eax,x add eax,y mov ebx,r imul ebx mov v,eax mov v+4,edx mov dl,al add dl,30h mov ah,2 int 21h mov ah,4ch int 21h code ends end start
5.6数据定义如下:执行下列指令,填写寄存器的值
ARRAY LABEL BYTE DA1 DW 2,9,14,3 DA2 DB 7,‘ABCDEDF’
LEN = $-DA1
MOV AL,ARRAY+2 (AL)=( )H ADD AL,DA2+1 (AL)=( )H MOV AX,DA2-DA1 (AX)=( )H
MOV AX,DA1+1 (AX)=( )H MOV BL,LEN (BL)=( )H
答: MOV AL,ARRAY+2 (AL)=( 09 )H ADD AL,DA2+1 (AL)=( 41 )H MOV AX,DA2-DA1 (AX)=( 0008 )H
MOV AX,DA1+1 (AX)=( 0900 )H MOV BL,LEN (BL)=( 10 )H
5.7 定义数据段,满足如下要求: (1)array为字符串变量:‘inspire a generation!’ (2)data1 为十六进制数:0FEDCBAH (3)data2为二进制数:10101010B。 (4)data3为100个为零的字节变量。
(5)分配500个字的空间待用。 答: data segment
Array db ‘inspire a generation!’ Data1 df 0fedcbah Data2 db 10101010B Data3 db 100 dup(0) dw 500 dup(?) data ends
5.8 假设程序中,数据段定义如下: Data1 db 50 dup(?) Data2 dw 10 dup(0)
Data3 dq 5 dup(2 dup(1,2))
(1)用指令将数据段首地址放入数据段寄存器中。
(2)用一条指令将data2的第一个数据放入BX寄存器中。 (3)将数据段字节数放入CX寄存器。 答:mov ax,data1 mov ds,ax Mov bx,data2[0]
Mov cx, 50+10*2+20*8
5.9现有数据定义如下:
Array1 dw 5 DUP(0)
Array2 EQU BYTE PTR Array1 请说明这两个变量之间的联系。 答:当汇编后,PTR类型操作符使Array2具有Array1相同的段地址和偏移地址,但它的数据类型为字节型。
5.10 给出下列程序段汇编后的结果: Val1 EQU 6 Val2 EQU 3
MOV BX,(Val1 LT 5) AND 20 MOV BX, (VAL2 GE 1) AND 30
MOV BX,(Val2 AND 5) OR (VAL1 GE 5) MOV BX,(Val2 - VAL1) GE 5
答:MOV BX,0 MOV BX,30 MOV BX,FF MOV BX,0
5.11设数据段定义如下: Data segment Org 20h Data1=4
Data2=data1+25h Data3 db ‘123456’ Db 47h,48h Count EQU $-data1
Data4 dw 49h,4Ah,4Bh Data ends
回答下列问题:
(1)Data1的偏移地址是多少? (2)Count的值是多少? 答:(1)0020h (2)0024h
5.12现有一数据区data1,需对其进行按字和按字节访问,请问应如何进行设置?
答:可以利用“LABEL“标签进行设置,如:
Operator_b LABEL byte
Operator_w dw 100dup(0)
其中按字节访问时采用Operator_b变量,按字访问时采用Operator_w变量。
5.13请问什么是PSP,EXE文件和COM文件有何区别?
答:PSP是程序段前缀。程序在执行前调入内存,由DOS确定装入的起始地址,建立PSP,接着再装入程序,其大小为256个字节。EXE文件和COM文件相比,COM文件只有一个段地址,由二进制代码组成,比EXE文件小,并且要求程序从偏移地址0100H单元开始,因为之前存放为PSP。
习题6
6.1 下列程序是在3个数中找出最小的数并放入AL,在括号中填入指令使其完整。
mov al,x mov bl,y
mov cl,z
cmp al,bl ( )
xchg al,bl l1: cmp al, cl
jle l2
( ) l2: ret 答:(1)jl l1 (2)xchg al,cl
6.2 数据段如下:
data segment
da1 db 1,2,‘abcd’ count = $-da1
da2 db 9 dup(?)
data ends
补充括号处的指令,使得程序把DA1数据区数据移到DA2数据区。
mov ax,data
mov ds, ax
mov es,( ) mov cx,( )
mov si, ( ) ( ) ( )
答: mov es,( AX )
mov cx,( COUNT )
mov si, ( OFFSET DA1 ) ( MOV DI, OFFSET DA2 ) ( REP MOVSB )
6.3 将AX和BX进行加、减、乘或除的运算,每种运算由用户从键盘上选择。程序中设置寄存器的值,或在DEBUG下设定寄存器值并在DEBUG下运行程序。 答:code segment
assume cs:code main proc far push ds sub ax,ax push ax mov ah,1 int 21h
cmp al,31h ;1加 jz ad
cmp al,32h ;2减 jz su
cmp al,33h ;3乘
jz mu
cmp al,34h ;4除 jz di ad:ADD AX,BX JMP exit su:SUB AX,BX JMP exit mu:MUL BX JMP exit d:DIV BX exit: ret main endp code ends end main
6.4 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字母。 答:code segment
assume cs:code main proc far push ds sub ax,ax push ax mov ah,1 int 21h cmp al,61h jb exit cmp al,7ah ja exit
mov bx,ax
sub al,1h ;输出前一字符 mov dl,al mov ah,2 int 21h
mov dl,bl ;输出当前字符 mov ah,2 int 21h
add dl,1h ;输出后一字符 mov ah,2 int 21h
exit:ret main endp code ends
end main
6.5 分别用LOOP循环和条件转移指令实现1+2+3+??+100,并将结果存入AX。 答:(1)code segment assume cs:code main proc far push ds sub ax,ax push ax mov bx,1
mov ax,0
mov cx,99 a:add ax,bx inc bx loop a
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编语言程序设计答案(5)在线全文阅读。
相关推荐: