任务一:
调试结果,成功完成数据段中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,实现功能:
打印'#'之前的输入内容
任务三:
运行结果:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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
|
任务四:
运行结果:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
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
任务六:
运行结果: