实验四
任务一:
调试结果,成功完成数据段中128位相加

line31-34的4条inc指令
不能替换为add指令
原因:使用add会导致进位寄存器CF的值发生变化。NC->CY;
而inc指令不会改变进位寄存器CF的值.
任务二:
运行结果:

1.汇编指令代码line11-18,实现功能:
从键盘上读取输入的字符,并保存到ds:[si],每读入一个就判断是否为'#',如果是则不保存,转跳至标号next处执行;
如果不是则si + 1并继续读入下一个字符。
2.汇编指令代码line20-22,实现功能:
换行
3.汇编指令代码line24-30,实现功能:
打印'#'之前的输入内容
任务三:
运行结果:

代码:
assume ds:data, cs:code, ss:stack
data segment
x dw 91,792,8536,65535,2021,0
len equ $ - x
data ends
stack segment
dw 8 dup(?)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 16
mov cx, len/2
print:
mov ax, word ptr ds:[di]
add di, 2
push cx
call printNumber
call printSpace
pop cx
loop print
mov ah, 4ch
int 21h
printNumber:
mov bx, 0
s1:
mov bp, 10
mov dx, 0
div bp
push dx
inc bx
mov cx, ax
inc cx
loop s1
mov cx, bx
s2:
pop dx
add dl, 30h
mov ah, 2
int 21h
loop s2
ret
printSpace:
mov ah, 2
mov dl, 20h
int 21h
ret
code ends
end start
任务四:
运行结果:

代码:
assume cs:code,ds:data
data segment
str db "assembly language, it's not difficult but tedious"
len equ $ - str
data ends
stack segment
db 8 dup(?)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov si, 0
mov cx, len
call strupr
call printStr
mov ax, 4c00h
int 21h
strupr :
push cx
push si
transform:
mov al, ds:[si]
cmp al, 97
jl continue
cmp al, 122
jg continue
and al, 0dfh
mov ds:[si], al
continue:
inc si
loop transform
pop si
pop cx
ret
printStr:
push cx
push si
print:
mov ah, 2
mov dl, ds:[si]
int 21h
inc si
loop print
pop si
pop cx
ret
code ends
end start
任务五:


该代码功能:
判断输入字符是否为7
是;在屏幕右侧输出yes
否;在屏幕右侧输出no
任务六:
运行结果:
