回 帖 发 新 帖 刷新版面

主题:求助,高手帮忙,2题汇编初学者的难题

1.从block 开始的内存缓冲区中有若干字节无符号数,编程求最大值并存放在max单
元中。

2.用DOS功能调用,编程显示系统年/月/日,并存放

回复列表 (共4个回复)

沙发


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处  这是一个出榨的过程,

板凳

做这个题目的时候我们需要有点预备知识,那就是 我们的时间都是存在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 楼


不好意思,我看错题目了,第二题,我以为是要把数据显示在电脑屏幕上
 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 楼

多谢多谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册