1.and和or的指令,具体可以总结为:and 有0则0;or 有1则1;
2.关于ASCII码的一些常用编码:例如小写字母比大写字母大32,也就是20H,小写字母从61H开始等等;
3.关于and和or指令的说明:
将al的第6位设置为0的指令是:and al,10111111B;
将al的第7位设置为0的指令是:and al,01111111B;
将al的第0位设置为0的指令是:and al,11111110B;
将al的第6位设置为1的指令是:or al,01000000B;
将al的第7位设置为1的指令是:or al,10000000B;
将al的第0位设置为1的指令是:or al,00000001B;
4.[bx+idata]的说明:mov ax,[bx+200]
(AX)=((DS)*16+(BX)+200)
5.mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200
以上三种指令实现相同的操作;
6.SI和DI在8086cpu中与bx的功能相近,但是DI和SI不能分成两个独立的8位处理器,例如在下面的3组指令中实现了相同的目的:
mov bx,0
mov ax,[bx]
mov si,0
mov ax,[si]
mov di,0
mov ax,[di]
7.[bx+si]和[bx+di]的指令说明:
mov ax,[bx][si]
(AX)=((DS)*16+(BX)+(SI))
8.[bx+si+idata]和[bx+di+idata]的说明:
mov ax,[bx+si+idata]的含义:
(AX)=((DS)*16+(BX)+(SI)+IDATA)
9.以下几组指令,实现了相同的操作:
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[si][bx].200
10.关于几种定位内存地址方法的说明:
1.[idata]用一个常量来表示,可以用于直接定位一个内存单元;
2.[bx]用一个变量来表示内存,可以用与间接定位一个内存地址;
3.[bx+idata]用一个常量和变量来表示地址,可以在一个起始地址的基础上用变量间接定位一个内存单元;
4.[bx+si]用两个变量表示地址;
5.[bx+si+idata]用两个变量和一个常量表示地址。
11.关于在一段程序中用两个循环的说明:
一般来说,需要暂时存储数据的时候最好用一个栈来存储;
12.本章的重点应用就是大小写字母的转换问题,具体的做法就是应用循环和and,or等指令将ascii的特殊位变成1 或者0.
以下是实验6第二题的内容:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:push cx
mov si,0
mov cx,4
s:mov al,[bx+si+3]
and al,11011111b
mov [bx+si+3],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
此题与书上的例题差不多一样,只要该几个地方就可以了。
2.关于ASCII码的一些常用编码:例如小写字母比大写字母大32,也就是20H,小写字母从61H开始等等;
3.关于and和or指令的说明:
将al的第6位设置为0的指令是:and al,10111111B;
将al的第7位设置为0的指令是:and al,01111111B;
将al的第0位设置为0的指令是:and al,11111110B;
将al的第6位设置为1的指令是:or al,01000000B;
将al的第7位设置为1的指令是:or al,10000000B;
将al的第0位设置为1的指令是:or al,00000001B;
4.[bx+idata]的说明:mov ax,[bx+200]
(AX)=((DS)*16+(BX)+200)
5.mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200
以上三种指令实现相同的操作;
6.SI和DI在8086cpu中与bx的功能相近,但是DI和SI不能分成两个独立的8位处理器,例如在下面的3组指令中实现了相同的目的:
mov bx,0
mov ax,[bx]
mov si,0
mov ax,[si]
mov di,0
mov ax,[di]
7.[bx+si]和[bx+di]的指令说明:
mov ax,[bx][si]
(AX)=((DS)*16+(BX)+(SI))
8.[bx+si+idata]和[bx+di+idata]的说明:
mov ax,[bx+si+idata]的含义:
(AX)=((DS)*16+(BX)+(SI)+IDATA)
9.以下几组指令,实现了相同的操作:
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[si][bx].200
10.关于几种定位内存地址方法的说明:
1.[idata]用一个常量来表示,可以用于直接定位一个内存单元;
2.[bx]用一个变量来表示内存,可以用与间接定位一个内存地址;
3.[bx+idata]用一个常量和变量来表示地址,可以在一个起始地址的基础上用变量间接定位一个内存单元;
4.[bx+si]用两个变量表示地址;
5.[bx+si+idata]用两个变量和一个常量表示地址。
11.关于在一段程序中用两个循环的说明:
一般来说,需要暂时存储数据的时候最好用一个栈来存储;
12.本章的重点应用就是大小写字母的转换问题,具体的做法就是应用循环和and,or等指令将ascii的特殊位变成1 或者0.
以下是实验6第二题的内容:
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:push cx
mov si,0
mov cx,4
s:mov al,[bx+si+3]
and al,11011111b
mov [bx+si+3],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
此题与书上的例题差不多一样,只要该几个地方就可以了。