主题:求助,高手帮忙,2题汇编初学者的难题
arrowind
[专家分:0] 发布于 2006-11-16 17:40:00
1.从block 开始的内存缓冲区中有若干字节无符号数,编程求最大值并存放在max单
元中。
2.用DOS功能调用,编程显示系统年/月/日,并存放
回复列表 (共4个回复)
沙发
a4099369 [专家分:140] 发布于 2006-11-17 09:43:00
assume cs:code,ds:data
data segment
db '17,87,89,48,47,a5,46'
max 0
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0 ;设置ds:[si]的位置
mov di,offset max ;设置max的位置
mov cx,8 ;设置循环数
call s
mov ax 4c00h
int 21h ;中断,程序返回
s: mov ax,[si]
cmp ax,[di]
jna s1 ;比较他们的大小,要是小于的话,就进行跳转
mov [di],ax
s1: dec cx
int si ;增加si的1 也可以用add命令
loop s
ret 修改ip的大小,返回到 mov ax,4c00h处 这是一个出榨的过程,
板凳
a4099369 [专家分:140] 发布于 2006-11-17 10:35:00
做这个题目的时候我们需要有点预备知识,那就是 我们的时间都是存在cmos里面的,在它里面我们的 cpu是通过端口。来对外部设备进行管理的,其实这些端口就是芯片上面的寄存器, cpu 对这些端口进行访问的时候,不能用以前的mov啊等等其他的命令,只能用in读 out写命令,在cmos ram里面的70好端口是用来存放数据地址的,71H是用来存放cmos数据的,在这个里面的0-0B是用来存放是的
相对应的是 0 秒 2 分 4 时 7 日 8 月 9年 里面存放的是BCD码 即:二进制数,我们要显示它,必须显示的是它的 ascII 所以 最后我们还必须加一个30H这样才会显示相对应 数字 那现在我们开始
assume cs:code
code segment
start: mov al,0
out 70h,al
int al, 71h ;这时我们读出的数字是秒他是二进制的数字,我们要转化
mov ah,al ;这时我们需要把他们的高四位和低四位求出来
mov cl,4
shr ah,cl ;这个求出来的是高四位的二进制
and al,00001111B ;这个求出的是低四位的二进制
mov ax,0b800h ;注意这时候b前有一个0
mov ex,ax
mov byte ptr ex:[160*12+36],al
mov byte ptr ex:[160*12+36+2],ah
mov ax 4c00h
int 21h
code ends
end start 这个时,在屏幕中见显示的是分,有了这个,我们可以顺次继续
完整程序如下:
assume ds:data,cs:code
data segment
db '9,8,7,4,2,0'
data end
stack segment
db 16 dup(0)
stack ends
code segment
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si 0
mov cx,6
s: mov al,bye ptr ds:[si]
out 70h,al
int al, 71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
mov ax,0b800h
mov es,ax
mov di,0
mov es:[160*12+36+di],ah
add di,2
mov es:[160*12+36+di],al
add di,2
mov al,5ch ;设置显示的是/
mov es:[160*12+36+di],al
add,di,2
int si
loop s
mov ax 4c00h
int 21h
code ends
end
3 楼
a4099369 [专家分:140] 发布于 2006-11-17 10:41:00
不好意思,我看错题目了,第二题,我以为是要把数据显示在电脑屏幕上
assume ds:data,cs:code
data segment
db '9,8,7,4,2,0'
db 12 dup(0)
data end
start: code segment
mov ax,data
mov ds,ax
mov si 0
mov cx,6
mov di,0
s: mov al,bye ptr ds:[si]
out 70h,al
int al, 71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
mov ds:[6+di],al
add di,1
mov ds:[6+di],ah
add di,1
int si
loop s
mov ax 4c00h
int 21h
code ends
end start
4 楼
arrowind [专家分:0] 发布于 2006-11-17 19:00:00
多谢多谢!
我来回复