实验4 8086标志寄存器及中断
1. 实验任务1
task1.asm源码
1 assume cs:code, ds:data 2 3 data segment 4 x dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031h 5 y dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912h 6 data ends 7 code segment 8 start: 9 mov ax, data 10 mov ds, ax 11 mov si, offset x 12 mov di, offset y 13 call add128 14 15 mov ah, 4ch 16 int 21h 17 18 add128: 19 push ax 20 push cx 21 push si 22 push di 23 24 sub ax, ax 25 26 mov cx, 8 27 s: mov ax, [si] 28 adc ax, [di] 29 mov [si], ax 30 31 inc si 32 inc si 33 inc di 34 inc di 35 loop s 36 37 pop di 38 pop si 39 pop cx 40 pop ax 41 ret 42 code ends 43 end start
回答问题
line31~line34的4条inc指令,能否替换成如下代码?你的结论的依据/理由是什么?

不能。add指令会影响flag寄存器标志位。
在debug中调试,观察数据段中做128位加之前和加之后,数据段的值的变化。给出调试观察截
图。

2. 实验任务2
程序task2.asm源码
1 assume cs:code, ds:data 2 data segment 3 str db 80 dup(?) 4 data ends 5 6 code segment 7 start: 8 mov ax, data 9 mov ds, ax 10 mov si, 0 11 s1: 12 mov ah, 1 13 int 21h 14 mov [si], al 15 cmp al, '#' 16 je next 17 inc si 18 jmp s1 19 next: 20 mov ah, 2 21 mov dl, 0ah 22 int 21h 23 24 mov cx, si 25 mov si, 0 26 s2: mov ah, 2 27 mov dl, [si] 28 int 21h 29 inc si 30 loop s2 31 32 mov ah, 4ch 33 int 21h 34 code ends 35 end start
运行测试截图

回答问题
运行程序,从键盘上输入一串字符,以#结束(比如,输入George Orwell, 1984#),观察结
果。结合运行结果,理解代码并回答问题:
① 汇编指令代码line11-18,实现的功能是?
输入字符,判断是否等于#,如果等于#就je next跳转到next;如果不等于#就jmp s1 跳转到s1继续输入字符。
② 汇编指令代码line20-22,实现的功能是?
oah表示换行,实现换行。
③ 汇编指令代码line24-30,实现的功能是?
按顺序逐个输出刚才输入的字符。
3. 实验任务3
task3.asm源码
1 assume ds:data, cs:code 2 3 data segment 4 x dw 91, 792, 8536, 65521, 2021,12 5 len equ $ - x 6 data ends 7 8 code segment 9 start: 10 mov ax, data 11 mov ds, ax 12 13 mov cx, len/2 14 15 s: 16 mov ax,ds:[di] 17 add di, 2 18 19 push cx 20 21 call printNumber 22 call printSpace 23 24 pop cx 25 loop s 26 27 mov ah, 4ch 28 int 21h 29 30 printNumber: 31 mov bx, 0 32 33 s1: 34 mov si, 10 35 mov dx, 0 36 div si 37 38 push dx 39 inc bx 40 41 cmp ax,0 42 jne s1 43 44 45 mov cx, bx 46 47 s2: 48 pop dx 49 add dl, 30h 50 mov ah, 2 51 int 21h 52 loop s2 53 54 ret 55 56 57 printSpace: 58 mov ah, 2 59 mov dl, 20h 60 int 21h 61 ret 62 63 code ends 64 end start
运行测试截图

4. 实验任务4
task4.asm源码
1 assume cs:code,ds:data 2 data segment 3 str db "assembly language, it's not difficult but tedious" 4 len equ $ - str 5 data ends 6 7 stack segment 8 db 8 dup(?) 9 stack ends 10 11 code segment 12 start: 13 mov ax, data 14 mov ds, ax 15 mov si, 0 16 mov cx, len 17 call strupr 18 call printStr 19 20 mov ax, 4c00h 21 int 21h 22 23 24 strupr: 25 push cx 26 push si 27 transform: 28 mov al, ds:[si] 29 cmp al, 97 30 jl continue 31 cmp al, 122 32 jg continue 33 and al, 0dfh 34 mov ds:[si], al 35 continue: 36 inc si 37 loop transform 38 39 pop si 40 pop cx 41 ret 42 43 44 printStr: 45 push cx 46 push si 47 48 print: 49 mov ah, 2 50 mov dl, ds:[si] 51 int 21h 52 inc si 53 loop print 54 55 pop si 56 pop cx 57 ret 58 59 code ends 60 end start
在debug中调试截图( call strupr 调用之前,数据段的值,以及,调用之后,数据段的值)
call strupr 调用之前

call strupr调用之后

5. 实验任务5
task5.asm源码
1 assume cs:code, ds:data 2 3 data segment 4 str1 db "yes", '$' 5 str2 db "no", '$' 6 data ends 7 8 code segment 9 start: 10 mov ax, data 11 mov ds, ax 12 13 mov ah, 1 14 int 21h 15 16 mov ah, 2 17 mov bh, 0 18 mov dh, 24 19 mov dl, 70 20 int 10h 21 22 cmp al, '7' 23 je s1 24 mov ah, 9 25 mov dx, offset str2 26 int 21h 27 28 jmp over 29 30 s1: mov ah, 9 31 mov dx, offset str1 32 int 21h 33 over: 34 mov ah, 4ch 35 int 21h 36 code ends 37 end start
程序运行测试截图(输入7,以及输入其他字符,运行结果截图)


程序的功能是?
判断输入得字符是否为7, 是7 输出yes ,不是7 输出no。

浙公网安备 33010602011771号