实验二 多个逻辑段的汇编源程序编写与调试
任务一:
1-1

1.DS=076A SS=076B CS=076C
2.data =X-2;stack=X-1.
1-2

- DS=076A ;SS=076B;CS=076C
- Data =X-2; stack =X-1;
1-3

1.DS=076A ;SS=076C;CS=076E
2.Data =X-4; stack =X-2;
1-4

- DS=076C;SS=076E;CS=076A
- Data =X+2; stack =X+4;
1-5
1.N
2.task1_4可以正常运行
任务二:
assume cs:code code segment start: mov ax,0b800h mov ds,ax mov bx,0f00h mov cx,50h mov ax,0403h s: mov ds:[bx],ax add bx,2 loop s mov ah,4ch int 21h code ends end start

任务三
assume cs:code data1 segment db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers data1 ends data2 segment db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0 ; ten numbers data2 ends data3 segment db 16 dup(0) data3 ends code segment start: mov ax,data1 mov ds,ax mov bx,0 mov cx,0ah s: mov ax,ds:[bx] add ax,ds:[bx+10h] mov ds:[bx+20h],ax inc bx loop s mov ah,4ch int 21h code ends end start
相加前:

执行后:

任务五

db 5 dup(2) 字体变为绿色

db 5 dup(5) 字体变为紫色

任务六
assume cs:code, ds:data data segment db 'Pink Floyd ' db 'JOAN Baez ' db 'NEIL Young ' db 'Joan Lennon ' data ends code segment start: mov ax,data mov ds,ax mov ax,data mov es,ax mov bx,0 mov cx,4 s1: mov si,cx mov cx,4 s2: mov al,es:[bx] or al,20h mov es:[bx],al inc bx loop s2 mov cx,si mov bx,0 mov ax,es inc ax mov es,ax loop s1 mov ah, 4ch int 21h code ends end start
执行前

执行后:

任务七
1 assume cs:code, ds:data, es:table 2 3 data segment 4 db '1975', '1976', '1977', '1978', '1979' 5 dd 16, 22, 382, 1356, 2390 6 dw 3, 7, 9, 13, 28 7 data ends 8 9 table segment 10 db 5 dup( 16 dup(' ') ) 11 table ends 12 13 code segment 14 start: 15 mov ax, data 16 mov ds, ax 17 mov ax, table 18 mov es, ax 19 20 ; 1.把年份放入每行开头 21 mov bx, 0 22 mov si, 0 23 mov di, 0 24 mov cx, 5 25 year: 26 27 mov dx, cx 28 mov cx, 4 29 yearnum: 30 31 mov al, byte ptr ds:[di] 32 mov byte ptr es:[bx][si], al 33 inc si 34 inc di 35 loop yearnum 36 37 38 mov cx, dx 39 add bx, 10h 40 mov si, 0 41 loop year 42 43 mov bx, 0 44 mov si, 5 45 mov cx, 5 46 income: 47 48 mov ax, word ptr ds:[di] 49 mov word ptr es:[bx][si], ax 50 add si, 2 51 add di, 2 52 mov ax, word ptr ds:[di] 53 mov word ptr es:[bx][si], ax 54 add si, 2 55 add di, 2 56 57 add bx, 10h 58 mov si, 5 59 60 loop income 61 62 63 mov bx, 0 64 mov si, 0Ah 65 mov cx, 5 66 employee: 67 68 mov ax, word ptr ds:[di] 69 mov word ptr es:[bx][si], ax 70 add si, 2 71 add di, 2 72 73 add bx, 10h 74 mov si, 0Ah 75 76 loop employee 77 78 79 mov bx, 0 80 mov si, 5 81 mov cx, 5 82 average: 83 84 mov ax, word ptr es:[bx][si] 85 add si, 2 86 87 mov dx, word ptr es:[bx][si] 88 add si, 3 89 div word ptr es:[bx][si] 90 add si, 3 ; 91 92 mov word ptr es:[bx][si], ax 93 94 add bx, 10h 95 mov si, 5 96 loop average 97 98 99 mov ah, 4ch 100 int 21h 101 code ends 102 end start

执行后

总结
本次实验的完成需要掌握loop指令中寄存器间数据的转存,理清楚每一次寄存器跳过的地址数。
使用debug工具对程序进行调试,使用g命令一次性执行到程序返回前.
浙公网安备 33010602011771号