鱼C论坛

 找回密码
 立即注册
查看: 3597|回复: 4

[争议讨论] 实验10

[复制链接]
发表于 2012-1-8 11:41:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一题,速度不错 1小时弄出来了,未看教程
assume cs:code
data segment
db 'Welcome to masm!',0
data ends

code segment
start:
mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str

mov ax,4c00h
int 21h

show_str:
mov ax,0b800h
mov es,ax ;定义ES是写入段
sub dl,1 ;列数减1
mov al,2 ;因每个显示的字占两个字节,所以要乘2 所以AL=2
mul dl ;乘列数得出列数的地址 
mov bx,ax ;将要写入的列地址放入BX保存
mov ah,0 ;ah清0
mov al,dh ;行数给AX,此时AX应是00行数
mov dx,160 ;每行160个字节 此时DX的2个参数已经读过了所有可以覆盖
mul dx ;行数乘160个字节算出要写入的行地址
add bx,ax ;将行数地址和列数地址相加算出实际要写入的地址,放入AX中
mov dh,cl ;将颜色数据放入高地址DH中
s: mov ch,0 ;ch清0
mov cl,byte ptr ds:[si] ;将数据段字符放入Cl中
jcxz s1 ;如果CX=0则跳转到S1结束
mov ch,dh ;将放入DH中的颜色数据拿回来给CL
mov word ptr es:[bx],cx ;将CX的值写入到实际地址中
add si,1
add bx,2
jmp s
s1:
ret




code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-8 13:22:00 | 显示全部楼层
本帖最后由 许楠 于 2012-1-8 13:22 编辑

气死我了,第二题按书上写的乘65536,在网上找了半天怎么乘65536,即使有也忒啰嗦,要用到ADC什么的,不象是这道题的本意,绞尽脑汁了也没想出来怎么乘,没办法看了视频,原来是这样......
算了,脑袋一团浆糊了 先休息一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-1-8 21:33:36 | 显示全部楼层
assume cs:code
stack segment
        db 8 dup (0)
stack ends

code segment
start:
        mov ax,4240h
        mov dx,000fh
        mov cx,0ah
        call divdw
divdw:
        mov bx,stack
        mov ss,bx
        mov sp,8
        push ax   ;先把AX保存起来
        mov ax,dx  ;将高16位放到低16位里来
        mov dx,0   ;高16位清0
        div cx      ;除CX,除完后DX是余数,AX是商
        mov bx,ax   ;将AX保存在BX中
        pop ax      ;取出AX
        div cx         ;此时DX没动,但DX是高16位,所以相当于乘了65536
        mov cx,dx   ;将余数给CX
        mov dx,bx   ;将BX里的值给DX,当作商的高16位,也就相当于乘了65536,AX则是默认的低16位
        ret

code ends
end start
只能先这样了,没办法啊 不会只能看教程 下面弄第3题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-20 10:30:10 | 显示全部楼层
哥们你代码有测试通过么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 00:18:03 | 显示全部楼层
顶楼主 都没问题。。第二题我用的8位除法 为啥第二次除完就出错了?
;X/N=INT(H/N)*10000H+[REM(H/N)*10000H+L]/N
;X=1000000=0F4240H,N=10=0AH
DATAS SEGMENT
    DW 4240H,0FH,0AH  
DATAS ENDS

STACKS SEGMENT
    DW 0
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,0
    MOV AX,WORD PTR DS:[0]
    MOV DX,WORD PTR DS:[2]
    MOV CX,WORD PTR DS:[4]
    CALL DIVDW
    MOV AH,4CH
    INT 21H
DIVDW:
        PUSH AX
        MOV AX,DX
        XOR DX,DX
        DIV CL
        MOV DL,AL ;INT(H/N)*10000H
        POP BX
        ADD BL,AH
        MOV AX,BX ;[REM(H/N)*10000+L]
        DIV CL
        MOV CL,AH
        MOV AH,0
CODES ENDS
    END START
T10.2 WHY.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表