2.16
物理地址:cs: 1 2 0 0 0 h
ip: +f f 0 0 h
= 2 1 f 0 0 h
第三章作业。
3.2 mov ax,ds:[2000h]是将ds段中2000h所在地址的内容传送至ax
3.4 (1)错。
(2)对。3)错不能加地址。
4)错。5)错不能将存储器中的内容放到存储器中。
6)对。7)对。
8)错 cs不能被写只能被读。
9)对。3.6 mov al,[3000h]
mov [2000h], al
3.11 立即寻址方式寄存器操作数寻址方式存储器操作数寻址方式
是寄存器操作数寻址方式。
3.13当sp或bp寄存器用作为基地址时,ss段是默认段地址;
其他情况下,ds段是默认段地址。
3.15 mov byte ptr[bp],200 是将数字“c8h”移入寄存器[5200h][6200h];
mov word ptr[bx],2000 是将数字“7d0h”移入寄存器[2100h][1400h]
3.19因为有符号乘法指令为imul,无符号乘法指令为mul。
3.30(1)当前栈顶地址为fe00h
(2)执行指令后栈顶地址为fdfe;栈顶两个字节的内容是3457h
4.1 在下列程序运行后,给相应的寄存器佶存储器单元填入运行的结果。
mov al,10h
mov cx,1000h
mov bx,2000h
mov [cx],al
xchg cx,bx
mov dh,[bx]
mov dl,01h
xchg cx,bx
mov [bx],dl
hlt结果:
ds:1000=10h
ds:2000=01h
cx=1000h
bx=2000h
dx=1001h
al=10h
4.11 自0500h单元开始,有10个无符号数,编写程序,求这十个数的和(用八位数运算指令),把和放到050a和050b单元中(和用两个字节表示),且高位在050b单元。
data segment
num db 1ah,2ah,34h,56h,7bh,7ch,27h,38h,49h,6eh
the result is 02db
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bl,0
mov si,050ah
mov [si],bl
mov si,050bh
mov [si],bl
mov si,0500h
mov di,0
mov bx,050ah
mov cx,10
loop1:
mov al,num[di]
mov [si],al
mov ah,[si]
add [bx],ah
inc si
inc di
adc byte ptr[bx+1],0
clcloop loop1
mov ax,4c00h
int 21h
code ends
end start
4.4 利用变址寄存器,编写一段程序,把自1000h单元开始的100个数传到自1070h开始的存储区中。
data segment
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,99
mov si,1000h
mov di,1070h
loop1:
mov ax,[si]
mov [di],ax
inc si
inc di
loop loop1
mov ax,4c00h
int 21h
code ends
end start
4.17 若在存储器中有数a,b,c,d(他们连续存放),编写一个程序实现下列算式:
((a*10+b)*10+c)*10+d (和<=65535)
data segment
num dw 001ah,0026h,002ch,0045h
the result is 7665
result dw 1 dup(0)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,3
mov bx,000ah
mov ax,num[si]
loop1:
mul bx
inc si
inc si
add ax,num[si]
loop loop1
mov result,ax
mov ax,4c00h
int 21h
code ends
end start
4.18 在0100h单元和010ah单元开始,存放两个各为10个字节的bcd数(
地址最低处放的是最低字节),求他们的和,且把和存入0114h开始的存储单元。
中。data segment
num1 db 0a1h,0a2h,0a3h,0a4h,0a5h,0b1h,0b2h,0b3h,0b4h,0b5h
num2 db 0c1h,0c2h,0c3h,0c4h,0c5h,0d1h,0d2h,0d3h,0d4h,0d5h
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
clcmov bx,0114h
mov si,0
mov di,0
mov cx,10
loop1:
mov ah,num1[si]
mov [di+0100h],ah
mov al,num2[si]
mov [di+010ah],al
adc ah,al
mov [bx],ah
inc si
inc di
inc bx
loop loop1
mov al,0
mov [bx],al
adc byte ptr [bx],0
mov ax,4c00h
int 21h
code ends
end start
结果如图:01 8b 89 87 85 83 b6 69 67 65 62 .
4.20 在0200h单元中开始放有数a(低位在前):
na=95 43 78 62 31 04 56 28 91 01
在020ah单元中开始放有数b:
nb=78 96 42 38 15 40 78 21 84 50
求两数之差,且把值送入自0200h开始的存储区。
data segment
na db 95h,43h,78h,62h,31h,04h,56h,28h,91h,01h
nb db 78h,96h,42h,38h,15h,40h,78h,21h,84h,50h
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
clcmov bx,0200h
mov si,0
mov di,0
mov cx,10
loop1:
mov ah,na[si]
mov [di+0200h],ah
mov al,nb[si]
mov [di+020ah],al
sbb ah,al
mov [bx],ah
inc si
inc di
inc bx
loop loop1
mov al,0
mov [bx],al
sbb byte ptr [bx],0
mov ax,4c00h
int 21h
code ends
end start
结果为负数:ff b1 0d 06 dd c4 1c 2a 35 ad 1d
4.37 若自0500h单元开始有1000个带符号数,把它们的最小值找出来,并且。
放在1000h单元中。
data segment
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,1000
mov al,0
mov si,0500h
loop1:
cmp al,[si]
jl next
mov al,[si]
next:inc si
loop loop1
mov si,1000h
mov [si],al
mov ax,4c00h
int 21h
code ends
end start
4.56 若自string 单元开始存放一个字符串(以字符$结尾),编写一个程序。
统计这个字符串的长度(不包括$字符),并把字符串的长度放在string
单元,把整个字符串下移两个存储单元。
data segment
string db 'abcdefghijklmn$'
leng dw 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov si,0
next:mov cl,string[si]
inc si
cmp cl,'$
jne next
dec si
mov ax,si
mov cx,si
inc cx
inc cx
inc si
loop1:
mov bl,string[si]
mov string[si+2],bl
dec si
loop loop1
mov word ptr string,ax
mov ax,4c00h
int 21h
code ends
end start
4.70 编写一个24为无符号数相乘的程序。
data segment
num1 dw 0012h,3456h
num2 dw 0065h,4321h
result dw 4 dup(0)
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,num1+2
mov si,num2+2
mul si
mov result+6,ax
mov result+4,dx
mov ax,num1
mul si
add result+4,ax
adc result+2,dx
mov ax,num1+2
mov si,num2
mul si
add result+4,ax
adc result+2,dx
lahfmov ch,ah
mov ax,num1
mul si
add result+2,ax
adc result,dx
mov ah,ch
sahfadc result,0
mov ax,4c00h
int 21h
code ends
end start
4.75 若自string开始有一个字符串(以#号作为字符串的结束标志),编写一个程序,查找此字符串中有没有字符$,有多少个$(放在number单元中,没有$则其为0,否则即为$的个数);且把每一个$字符所存放的地址存入自pointr开始的连续的存储单元中。
微机原理作业
微型计算机原理及应用 作业。作业组别 十八。班级 机电一班姓名 学号 作业指导教师 任课教师 实验室教师 作业完成时间 2013年4月17日。目录。1题目一31 1题目分析31.2寄存器的应用说明31.3程序框图31.4详细程序41.5程序调试的情况42题目二42.1题目分析52.2寄存器及主存等的...
微机原理作业
微型计算机原理及应用 作业。作业组别 第30组。班级 12级轧钢二班。姓名 贾闯 学号 120101020023 指导教师 李艳文 完成时间 2015年 05 月。一 题目及题目分析描述及要求。题目 内存中source处存放着10个字节型数据,请记录每个字节数据中二进制位1的个数,并按照数据字节在前...
微机原理作业
微型计算机原理及应用 作业。作业组别 第十一组。班级 10级机控一班。姓名 孙策。学号 100107010140 作业指导教师 李艳文 作业完成时间 2013年4月9日。目录。第一题 1 一 题目分析 1 二 寄存器及主存应用说明 1 三 程序框图 1 四 详细程序 1 五 程序调试情况 2 第二题...