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 mov ah, 4ch 15 int 21h 16 add128: 17 push ax 18 19 push cx 20 push si 21 push di 22 sub ax, ax 23 mov cx, 8 24 s: mov ax, [si] 25 adc ax, [di] 26 mov [si], ax 27 28 inc si 29 inc si 30 inc di 31 inc di 32 loop s 33 34 pop di 35 pop si 36 pop cx 37 pop ax 38 ret 39 code ends 40 end start回答问题 line31~line34的4条inc指令,能否替换成如下代码?你的结论的依据/理由是什么?
1 add si,2 2 add di,2答:不能,因为inc指令与add指令存在区别,inc指令不会改变cf的值,而add会。 在debug中调试截图:
做128位加之前:
做128位加之后: 2. 实验任务2 task42.asm源码:assume cs:code, ds:data data segment str db 80 dup(?) data ends code segment start: mov ax, data mov ds, ax mov si, 0 s1: mov ah, 1 int 21h mov [si], al cmp al, '#' je next inc si jmp s1 next: mov ah, 2 mov dl, 0ah int 21h mov cx, si mov si, 0 s2: mov ah, 2 mov dl, [si] int 21h inc si loop s2 mov ah, 4ch int 21h code ends end start运行测试截图: 回答问题 ① 汇编指令代码line11-18,实现的功能是? 答:输入一个以#为末尾的字符串。 ② 汇编指令代码line20-22,实现的功能是? 答:输出一个换行符。 ③ 汇编指令代码line24-30,实现的功能是? 答:输入与输入相同的字符串。 3. 实验任务3 task4_3.asm源码:
1 assume cs:code,ds:data 2 data segment 3 x dw 91, 792, 8536, 65521, 2021 4 len equ $ - x 5 data ends 6 stack segment 7 db 64 dup(0) 8 top equ $+1 9 stack ends 10 code segment 11 start: 12 mov ax,data 13 mov ds,ax 14 mov ax,stack 15 mov ss,ax 16 mov sp,top 17 18 mov cx,len/2 19 mov bx,0 20 s1: 21 mov ax,ds:[bx] 22 push bx 23 push cx 24 call printNumber 25 call printSpace 26 pop cx 27 pop bx 28 add bx,2 29 loop s1 30 31 mov ah,4ch 32 int 21h 33 34 printNumber: 35 mov bx,10 36 mov cx,0 37 s2: 38 mov dx,0 39 div bx 40 push dx 41 inc cx 42 cmp ax,0 43 jne s2 44 45 s3: 46 mov ah,2 47 pop dx 48 or dl,30h 49 int 21h 50 loop s3 51 ret 52 53 printSpace: 54 mov ah,2 55 mov dl,' ' 56 int 21h 57 ret 58 59 code ends 60 end start运行测试截图 :
4. 实验任务4 task4.asm源码:
1 assume cs:code,ds:data 2 3 data segment 4 str db "assembly language, it's not difficult but tedious" 5 len equ $ - str 6 data ends 7 8 code segment 9 start: 10 mov ax, data 11 mov ds, ax 12 mov si, offset str 13 mov cx, len 14 call strupr; 15 mov ax, 4c00h 16 int 21h 17 18 strupr: 19 mov al, [si] 20 cmp al, 97 21 jb s 22 cmp al, 122 23 ja s 24 and al, 0dfh 25 mov [si], al 26 s:inc si 27 loop strupr 28 ret 29 code ends 30 end start在debug中调试截图: 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 star程序运行测试截图: 输入7: 输入其他字符: 程序的功能是:判断输入的字符是否是‘7’,如果是则输出yes,否则输出no。 6. 实验任务6 答:中断也是异常的一种,中断有硬中断(由硬件产生的中断)和软中断(软件产生的中断)之分。ARM有七种不同的中断源,在中断向量表中对应的地址范围是0X00 ~ 0X1C。 int是软中断指令,CPU执行int n指令,相当于引发一个n号中断的中断过程,执行过程如下:
1)取中断类型码n;
2)标志寄存器入栈,IF=0,TF=0;
3)CS、IP入栈;
4)(IP)=(n*4),(CS)=(n*4+2)。