
4.1已知某数据段中有
COUNT1 EQU 16H
COUNT2 DW 16H
下面两条指令有何异同。
MOV AX,COUNT1
MOV BX,COUNT2
解: 同:执行完之后,AX=BX=16H
异:MOV AX,COUNT1向AX中传送的是立即数,而MOV BX,COUNT2向BX中传送的是变量内容。
4.2下列程序段执行后,寄存器AX、BX和CX的内容分别是多少?
ORG 0202H
DA-WORD DW 20H
MOV AX,DA-WORD ;AX=0020H
MOV BX,OFFSET DA-WORD ;BX=0202H
MOV CL,BYTE PTR DA-WORD ;CL=20H
MOV CH,TYPE DA-WORD ;CH=02H
解: AX=0020H,BX=0202H,CX=0220H
4.3设平面上有一点P的直角坐标(x,y),试编制完成以下操作的程序:
如P点落在第I象限,则K=I;
如P点落在坐标轴上,则K=0。
解:
DAT SEGMENT
msg db 'please input number only!$'
MSG1 DB 10,13,'INPUT X:$'
MSG2 DB 10,13,'INPUT Y:$'
xbuf db 20,0
xbuf1 db 20 dup(?)
ybuf db 20,0
ybuf1 db 20 dup(?)
D1 DB 10,13,'K='
D2 DB '?,$'
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
mov dx,offset msg
mov ah,9
int 21h
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
mov dx,offset xbuf
MOV AH,0AH
INT 21H
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
mov dx,offset ybuf
MOV AH,0AH
INT 21H
CMP ybuf1,'0'
JE PRO1
CMP xbuf1,'0'
JE PRO1
cmp xbuf1,'-'
Jz PRO2
CMP ybuf1,'-'
Je PRO4
MOV D2,'1'
JMP SHOW
PRO1: MOV D2,'0'
JMP SHOW
PRO2: CMP ybuf1,'-'
Je PRO3
MOV D2,'2'
JMP SHOW
PRO3: MOV D2,'3'
JMP SHOW
PRO4: MOV D2,'4'
SHOW: MOV DX,OFFSET D1
MOV AH,9
INT 21H
mov ah,4ch
int 21h
COD ENDS
END BG
4.4 试编制一程序,把CHAR1中各小写字母分别转换为对应的大写字母,并存放于CHAR2开始的内存单元中。
CHAR DB‘abcdef’
CHAR2 DB $—CHAR1 DUP(0)
解:
DAT SEGMENT
CHAR1 DB 'abcdefgh'
CHAR2 DB $-CHAR1 DUP(0)
N EQU $-CHAR2
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV SI,0
MOV CX,N
LP: MOV AL,CHAR1[SI]
SUB AL,20H
MOV CHAR2[SI],AL
INC SI
LOOP LP
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.5 试编写一程序,把DABY1字节单元中数据分解成3个八进制数,其最高位八进制数据存放在DABY2字节单元中,最低位存放在DABY2+2字节单元中。
DABY1 DB 6BH
DABY2 DB 3DUP(0)
解:
DAT SEGMENT
DABY1 DB 6BH
DABY2 DB 3 DUP(0)
DB 24H
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV AL,DABY1
AND AL,07H
MOV DABY2+2,AL
MOV AL,DABY1
AND AL,38H
MOV CL,3
SHR AL,CL
MOV DABY2+1,AL
MOV AL,DABY1
AND AL,0C0H
MOV CL,6
SHR AL,CL
MOV DABY2,AL
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.12 试编写一程序,编程计算(A*B+C-70)/A,其中A、B、C均为字节变量。
解:
DAT SEGMENT
A DB 23
B DB 45
C DB 67
shang DB ?
yushu db ?
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV AL,A
IMUL B
MOV CL,C
MOV CH,0
ADD AX,CX
MOV DX,70
SUB AX,DX
MOV BL,A
IDIV BL
MOV shang,AL
mov yushu,ah
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.14 试编写一程序,找出BUF数据区中带符号数的最大数和最小数。
解:
DAT SEGMENT
BUF DB 3,6,5,4,1,-56,,78,-67,12,43,45,-32
N EQU $-BUF
max db ?
min db ?
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV SI,1
MOV CX,N-1
mov al,buf
mov bl,al
RECMP1: CMP AL,BUF[SI]
JgE NOP1
mov AL,BUF[SI]
NOP1: cmp bl,buf[si]
jle nop2
mov bl,buf[si]
nop2: INC SI
LOOP RECMP1
mov max,al
mov min,bl
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.5 试编写一程序,把DABY1字节单元中数据分解成3个八进制数,其最高位八进制数据存放在DABY2字节单元中,最低位存放在DABY2+2字节单元中。
DABY1 DB 6BH
DABY2 DB 3DUP(0)
解:
DAT SEGMENT
DABY1 DB 6BH
DABY2 DB 3 DUP(0)
DB 24H
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV AL,DABY1
AND AL,07H
MOV DABY2+2,AL
MOV AL,DABY1
AND AL,38H
MOV CL,3
SHR AL,CL
MOV DABY2+1,AL
MOV AL,DABY1
AND AL,0C0H
MOV CL,6
SHR AL,CL
MOV DABY2,AL
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.6 从BUF地址处起,存放有100字节的字符串,设其中有一个以上的‘A’字符,编程查找出第一个‘A’字符相对起始地址的距离,并将其存入LEN单元。
解:
DAT SEGMENT
STRING ‘1234ABCE--------’
N EQU $-STRING
KEY DB ‘A‘
LEN DB ?
MSG1 DB ‘NOT FOUND KEY $’
MSG2 DB ‘THE KEY IS AT:$‘
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG:MOV AX,DAT
MOV DS,AX
MOV SI,0
MOV CX,N-1
MOV AL,BYTE PTR KEY
LP:CMP AL,STRING[SI]
| 12 |
| 34 |
| 0 |
| 56 |
| 78 |
| 00 |
| 90 |
| 00 |
| 46 |
| AB |
| 34 |
| 12 |
| 00 |
| 00 |
| 04 |
| 00 |
| 10 |
| 00 |
| 00 |
| 00 |
| 00 |
| 00 |
| 00 |
JE FIND
NEXT:INC SI
LOOP LP
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
JMP LAST
FIND:MOV LEN,SI
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
MOV DL,LEN
MOV AH,2
INT 21H
LAST:MOV AH,4CH
INT 21H
COD ENDS
4.7 写出下列逻辑地址的段地址,偏移地址和物理地址。
(1)4312H:0B74H (2)10ADH:0DE98H
(3)8314H:0FFH (4)78BCH:0FD42H
解:(1)段地址:4312H,偏移地址:0B74H,物理地址:43C94H
(2)段地址:10ADH,偏移地址:0DE98H,物理地址:1E968H
(3)段地址:8314H,偏移地址:0FFH,物理地址:930A4H
(4)段地址:78BCH,偏移地址:0FD42H,物理地址:802H
4.8 某程序设置的数据区如下所示
DATA SEGMENT
DB1 DB 12H,34H,0,56H
DW1 DW 78H,90H,0AB46H
ADR1 DW DB1
ADR2 DW DW1
AAA DW $—DB1
BUF DB 5 DUP(0)
DATA ENDS
画出该数据段内容在内存中的存放形式
(要求用十六进制补码表示,按字节组织)
解:如右图示
4.9 假设BX=54A3H,变量VALUE中存放的内容为68H,确定下列各条指令单独执行后BX=?
(1)XOR BX,VALUE (2)OR BX,VALUE
(3)AND BX,00H (4)SUB BX,VALUE
(5)XOR BX,0FFH (6)TEST BX,01H
解:(1)BX=54CBH (2)BX=54EBH
(3)BX=00H (4)BX=543BH
(5)BX=545CH (6)BX=54A3H,按位与,不回送结果
4.10 以BUF1和BUF2开头的两个字符串,其长度均为LEN,试编程实现。
(1)将BUF1开头的字符串传送BUF2开始的内存空间;
(2)将BUF1开始的内存空间全部为零。
解:
DAT SEGMENT
BUF1 DB ‘ABCD——‘
BUF2 DB ‘1234——‘
LEN EQU $—BUF2
DAT ENDS
COD SEGMENTS
ASSUME CS:COD,DS:DAT
BG:MOV AX,DAT
MOV DS,AX
MOV SI,0
MOV CX,LEN
LP1:MOV AL,BUF1[SI]
MOV BUF2[SI],AL
INC SI
LOOP LP1
MOV SI,0
MOV CX,LEN
MOV AL,0
LP2:MOV BUF1[SI],AL
INC SI
LOOP LP2
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.11 假设数据段的定义如下所示。
P1 DW ?
P2 DB 32 DUP(?)
PLLENTH EQU $—P1
试问PLENTH的值为多少?表示什么意义?
解:PLENTH的值为34,它表示包括P1、P2的数据变量的总长度(字节数)。
4.12 试编写一程序,编程计算(A*B+C-70)/A,其中A、B、C均为字节变量。
解:
DAT SEGMENT
A DB 23
B DB 45
C DB 67
shang DB ?
yushu db ?
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV AL,A
IMUL B
MOV CL,C
MOV CH,0
ADD AX,CX
MOV DX,70
SUB AX,DX
MOV BL,A
IDIV BL
MOV shang,AL
mov yushu,ah
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.14 试编写一程序,找出BUF数据区中带符号数的最大数和最小数。
解:
DAT SEGMENT
BUF DB 3,6,5,4,1,-56,,78,-67,12,43,45,-32
N EQU $-BUF
max db ?
min db ?
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,DAT
MOV DS,AX
MOV SI,1
MOV CX,N-1
mov al,buf
mov bl,al
RECMP1: CMP AL,BUF[SI]
JgE NOP1
mov AL,BUF[SI]
NOP1: cmp bl,buf[si]
jle nop2
mov bl,buf[si]
nop2: INC SI
LOOP RECMP1
mov max,al
mov min,bl
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.17 在自BLOCK开始的存储区中有100个带符号数。试用气泡排列法编写成一个程序使它们排列有序。
解: 按照从小到大的顺序排列:
DAT SEGMENT
BLOCK DB 1,2,3,-3,4,43,5,-45,23,-43,123,-123,43
n equ $-block
DAT ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
BG: MOV AX,dat
MOV DS,AX
mov dx,n-1
mov si,0
lp: mov al,block[si]
MOV CX,n-1
sub cx,si
mov bx,1
RECMP: cmp AL,block[bx+SI]
JLE NOCH
xchg AL,block[bx+SI]
NOCH: INC bx
LOOP RECMP
mov block[si],al
inc si
dec dx
jnz lp
MOV AH,4CH
INT 21H
COD ENDS
END BG
4.20 试编程:从键盘上输入同学的姓名Mr.ABC或MrS.XYZ,当按动回车键时,屏幕上将显示出
“Welcome MR.ABC”或“Welcome MrS.XYZ”
解:
dat segment
msg1 db 10,'please input you name:$'
msg2 db 10,13,'welcome $'
keybuf db 50,0
key db 50 dup('$')
dat ends
cod segment
assume cs:cod,ds:dat
beg: mov ax,dat
mov ds,ax
lp: mov dx,offset msg1
mov ah,9
int 21h
mov dx,offset keybuf
mov ah,10
int 21h
; mov al,13
; cmp al,key
; je end_l
mov dx,offset msg2
mov ah,9
int 21h
mov dx,offset key
mov ah,9
int 21h
; jmp lp
end_l: mov ah,4ch
int 21h
cod ends
end beg
4.20 试编程:从键盘上输入同学的姓名Mr.ABC或MrS.XYZ,当按动回车键时,屏幕上将显示出
“Welcome MR.ABC”或“Welcome MrS.XYZ”
解:
dat segment
msg1 db 10,'please input you name:$'
msg2 db 10,13,'welcome $'
keybuf db 50,0
key db 50 dup('$')
dat ends
cod segment
assume cs:cod,ds:dat
beg: mov ax,dat
mov ds,ax
lp: mov dx,offset msg1
mov ah,9
int 21h
mov dx,offset keybuf
mov ah,10
int 21h
; mov al,13
; cmp al,key
; je end_l
mov dx,offset msg2
mov ah,9
int 21h
mov dx,offset key
mov ah,9
int 21h
; jmp lp
end_l: mov ah,4ch
int 21h
cod ends
end beg
