实验4

1.
不可以替换,因为add语句会产生进位,影响CF标志位的值,导致计算结果出错。
 
之前:
  

之后:

  

2.

 

  运行截图:

  

 

 
 
(1).将al中的输入字符存到si中,并与‘#’进行比较,若相同,跳出循环,若反之,则继续循环。
(2).输出换行符,进行换行。
(3).输出除‘#’以外的所有输入字符,因为‘#’并没有令si增一,循环输出时的次数是si,所以不会输出‘#’
3.

assume cs:code, ds:data

data segment
x dw 91, 792, 8536, 65521, 2021
len equ $ - x
data ends

stack segment
db 16 dup(0)
stack ends

code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 16
mov si, offset x

mov cx, 5

s:
mov ax, ds:[si]
call printNumber
call printSpace
add si, 2
loop s

mov ah, 4ch
int 21h


printNumber:
push cx
mov cx, 0
s2:
mov bx, 10
mov dx, 0
div bx
push dx
inc cx
cmp ax, 0
jne s2

s3:
pop bx
or bl, 30h
mov ah, 2
mov dl, bl
int 21h
loop s3
pop cx
ret

 

printSpace:
mov ah, 2
mov dl, 20h
int 21h
ret


code ends
end start

   

4.

data segment
str1 db "assembly language, it's not difficult but tedious"
len equ $ - str1
data ends

stack segment
db 16 dup(0)
stack ends

code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov si,offset str1
mov cx,len
call strupr

mov ah,4ch
int 21h

strupr:
s:
mov al,ds:[si]

cmp al,'a'
jb next
cmp al,'z'
ja next

and al,0dfh;1101 1111
mov ds:[si],al

next:
inc si
loop s
ret

code ends
end start

调用之前:
 
  

调用之后:

  
5.
 

  

当键盘输入7后,在屏幕24行70列显示yes, 若输入其他字符,则在屏幕24行70列显示no。该程序设置了光标位置为:0页24行70列。当输入字符为7时,跳转到标号s1处,调用int 21h的子功能,在设置的光标位置显示字符串"yes";若不为7,调用int 21h的子功能,在设置的光标位置显示字符串"no"。
6.

 

 

中断是指CPU不再接着向下执行,而是转去处理这个特殊信息。是指由于接收到外围硬件(相对于CPU与内存而言)的异步信号或者来自软件的同步信号而进行相应的硬件/软件处理。CPU接受到中断信息后,可以立即对中断信息进行处理,用来处理中断信息的程序被称为中断处理程序。软中断是指由软件本身发给操作系统内核的中断信号。
中断过程是先从从中断信息中取得中断类型码,然后令标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值,所以先将其保存在栈中),并设置标志寄存器的第8位TF和第9位IF的值为0。CS的内容入栈,IP的内容入栈。最后从内存地址为中断类型码*4和中断类型码*4+2的两个子单元中读取中断处理程序的入口地址设置IP和CS。
posted @ 2021-12-16 23:11  【VC】熬夜不吃饭的兔子  阅读(59)  评论(0)    收藏  举报