201983290125汇编语言实验二

1.任务一

1-1
汇编并连接task1_1.asm
201983290125汇编语言实验二
文章图片


用g命令打断点,使程序执行至17行停止,查看寄存器的值
201983290125汇编语言实验二
文章图片


(1)ds=076A;
ss=076B;
cs=076C;
(2)ds=X-0002;
ss=X-0001;

1-2
201983290125汇编语言实验二
文章图片


(1)ds=076A
ss=076B;
cs=076C;
(2)ds=X-0002;
ss=X-0001;

1-3
201983290125汇编语言实验二
文章图片


(1)ds=076A
ss=076C;
cs=076E;
(2)ds=X-0004;
ss=X-0002;

1-4
201983290125汇编语言实验二
文章图片


(1)ds=076C;
ss=076E;
cs=076A;
(2)ds=X+0002;
ss=X+0004;

1-5
(1)如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为 (n+15)/16,即对N/16向上取整,因为段大小为16字节整数倍,不满的部分也要补足16字节。
(2)
只有1-4可以执行,原因如下:
start标号表示程序段的开始,end start表示程序段结束,start和end start必须成对出现,如果end start不存在,则忽略start标号,当作缺省处理。当程序开头即为程序入口时,可以缺省。
只有1-4的开头是代码段,所以只有1-4可以执行。

2.任务2
代码如下:

assume cs:code code segmentmov ax,0b800h mov ds,ax mov bx,0f00h mov cx,80 p: mov ds:[bx],0403h inc bx inc bx loop pmov ah,4ch int 21h code ends

结果如下:
201983290125汇编语言实验二
文章图片


3.任务3
代码如下
assume cs:code data1 segment db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers data1 endsdata2 segment db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0; ten numbers data2 endsdata3 segment db 16 dup(0) data3 endscode segment start: mov ax,data1 mov ds,ax mov ax,data2 mov es,ax mov ax,data3 mov ss,ax mov bx,0 mov cx,10 s: mov ax,0 add ax,ds:[bx] add ax,es:[bx] mov ss:[bx],ax inc bx loop smov ax,4c00h int 21hcode ends end start

未进入代码段时的值
201983290125汇编语言实验二
文章图片


data1为076a:0000开始的10个单元,data2,data3分别从076b,076c开始,可以看到076c此时全为0
运行后,076c结果如下
201983290125汇编语言实验二
文章图片


变成了data1+data2

4.任务4
代码如下:
assume cs:codedata1 segment dw 2, 0, 4, 9, 2, 0, 1, 9 data1 ends data2 segment dw 8 dup(?) data2 endscode segment start: mov ax,data1 mov ds,ax mov ax,data2 mov ss,ax mov cx,8 mov sp,16 mov bx,0 s: mov ax,[bx] push ax inc bx inc bx loop smov ah, 4ch int 21h code ends end start

进入代码段前:
201983290125汇编语言实验二
文章图片


代码段运行完毕后
201983290125汇编语言实验二
文章图片



5.任务5
运行程序
201983290125汇编语言实验二
文章图片


执行到25、27行之间
201983290125汇编语言实验二
文章图片


line 19 作用
将data1中内存单元值与0dfh即16进制数df进行与运算,而df化成二进制为11011111,与运算将第6位原本的数字变成0,
大写字母ascii范围01000001~01011010,小写字母为01100001-01111010,所以将小写字母第6位的1变更成0,即可小写转大写,
而大写字母原本的0不变,所以第19行将所有字母变成大写。

改为db 5 dup(2)
结果如下:
201983290125汇编语言实验二
文章图片


一个字符占一个字,即2字节,低位字节表示ascii吗,高位字节表示字符参数,高4位底色,第4位字符本身颜色。

6.任务6
assume cs:code, ds:datadata segment db 'Pink Floyd' db 'JOAN Baez' db 'NEIL Young' db 'Joan Lennon' data endscode segment start: mov ax,data mov ds,ax mov cx,4 mov bx,0 s: mov dx,cx mov cx,4 mov si,0 p: mov al,ds:[bx+si] or al,00100000B mov ds:[bx+si],al inc si loop p add bx,16 mov cx,dx loop s mov ah, 4ch int 21h code ends end start

201983290125汇编语言实验二
文章图片


201983290125汇编语言实验二
文章图片




7.任务7

assume cs:code, ds:data, es:tabledata segment db '1975', '1976', '1977', '1978', '1979' dw16, 22, 382, 1356, 2390 dw3, 7, 9, 13, 28 data endstable segment db 5 dup( 16 dup(' ') ); table endscode segment start: mov ax,data mov ds,ax mov ax,table mov es,ax mov bx,0 mov si,0 mov cx,5 p: mov ax,ds:[bx] mov es:[si],ax mov ax,ds:[bx+2] mov es:[si+2],ax add bx,4 add si,16 loop p mov bx,20 mov cx,5 mov si,5 s: mov ax,0 mov es:[si+2],ax mov ax,ds:[bx] mov es:[si],ax add bx,2 add si,16 loop s mov bx,30 mov cx,5 mov si,10 q: mov ax,ds:[bx] mov es:[si],ax add bx,2 add si,16 loop q mov cx,5 mov si,0 r: mov ax,es:[si+5] mov dx,es:[si+7] div word ptr es:[si+10] mov es:[si+13],ax add si,16 loop rmov ah, 4ch int 21h code ends end start

assume cs:code, ds:data, es:tabledata segment db '1975', '1976', '1977', '1978', '1979' dw16, 22, 382, 1356, 2390 dw3, 7, 9, 13, 28 data endstable segment db 5 dup( 16 dup(' ') ); table endscode segment start: mov ax,data mov ds,ax mov ax,table mov es,ax mov bx,0 mov si,0 mov cx,5 p: mov ax,ds:[bx] mov es:[si],ax mov ax,ds:[bx+2] mov es:[si+2],ax add bx,4 add si,16 loop p mov bx,20 mov cx,5 mov si,5 s: mov ax,0 mov es:[si+2],ax mov ax,ds:[bx] mov es:[si],ax add bx,2 add si,16 loop s mov bx,30 mov cx,5 mov si,10 q: mov ax,ds:[bx] mov es:[si],ax add bx,2 add si,16 loop q mov cx,5 mov si,0 r: mov ax,es:[si+5] mov dx,es:[si+7] div word ptr es:[si+10] mov es:[si+13],ax add si,16 loop rmov ah, 4ch int 21h code ends end start


运行前后:
201983290125汇编语言实验二
文章图片



201983290125汇编语言实验二
文章图片


【201983290125汇编语言实验二】
实验总结:
1.通过本次实验,掌握了循环loop的用法。
2.了解了通过与、或运算改变字母大小写的方法
3.了解了字符在内存中的存储方式。















    推荐阅读