1.assume cs:code, ds:data
data segment
BUF1 db 12,45,98,7,5,-3,6,-2,9,4,4,5,8,4,21,2,45,12,5,4,3,5,75,2,1,5,7,-1
data ends
code segment
start:
mov ax, data
mov ds, ax
mov es,ax
lea di, BUF1
mov cx, 65535
mov al,-1
cld
repne scasb ;但al-(di) == 0, 即al = (di)是跳出循环, 或者cx=0时, 跳出循环, 所以当(di)=-1时, 跳出循环
;如果(di)不等于-1,那么cx-1,继续循环。直到(di) = -1, 或cx = 0
mov ax, 65535
sub ax, cx ;现在cx的值是65535-字符串的长度, 那么65535-(65535-字符串的长度) = 字符串的长度
mov cx,ax
mov ax, 4c00h
int 21h
code ends
end start
2.
assume cs:code
code segment
start:
xor byte ptr ds:[0500H], 11110000b ;0500H单元有一个数
;异或有一个特点,就是任何位与1异或,取反,与0异或,不变
;所以高4位置1取反, 低4位置0不变
mov ax, 4c00h
int 21h
code ends
end start
3.
;编写子程序。求内存中一无符号字节型数据序列的最大值和最小值。
;该无符号字节型数据序列的起始地址位于SI中,
;数据个数位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序调用子程序实现上述功能。
assume cs:code, ds:data
data segment
NUM db 12,45,0,98,12,255,45,12,36,88,54,12,36 ;最大值为255(FF), 最小值为0(0)
COUNT db $-NUM
data ends
code segment
start:
mov ax, data
mov ds,ax
mov cl, COUNT ;数据个数位于CX中
mov si, offset NUM ;该无符号字节型数据序列的起始地址位于SI中
mov al, [si]; ;假设最小值现在在al中
mov ah, al; ;假设最大值现在在al中
inc si
lp: cmp al, [si]
jb done ;如果al小于[di]的话,那么al还是最小值, 不需要改变
mov al, [si] ;否则[di]中就是最小值,那么将他赋值给al
done: cmp ah, [si]
ja done1 ;如果ah大于[di], 那么不需要改变, 还是最大值
mov ah,[si] ;否则[di]中就是最大值,那么将他赋值给al
done1: inc si
loop lp
mov ax,4c00h
int 21h
code ends
end start
百度不好排版,楼主凑合看吧
源代码文件中的代码是排好版的
PS:若有不明白的地方,可以追问