实验10 编写子程序
1,顯示字符串
assume cs:codesg, ds:datasgdatasg segmentdb 'hello, world', 0 datasg endscodesg segment start: mov dh, 14mov dl, 40mov cl, 2mov ax, datasgmov ds, axmov si, 0 ;si point to datacall show_strmov ax, 4c00hint 21h;-------show_str--------------- show_str:push sipush dipush cxpush bxmov bl, clmov ax, 0b800hmov es, axmov di, 0mov al, 160mul dhmov di, axmov al, 2 ;es:di point to display memorymul dladd di, axs: xor cx, cxmov cl, ds:[si]jcxz okmov es:[di+0], clmov es:[di+1], bladd si, 1add di, 2jmp sok: pop bxpop cxpop dipop siretcodesg ends end start實(shí)驗(yàn)結(jié)果:
2,解決除法溢出的問(wèn)題
復(fù)習(xí)一下常規(guī)cpu中div指令的設(shè)計(jì):
(1)除數(shù):有8位和16位兩種,在一個(gè)reg或者內(nèi)存單元中;
(2)被除數(shù):默認(rèn)放在ax或者dx和ax中,如果除數(shù)為8位,則被除數(shù)為16位,默認(rèn)放在ax中;如果除數(shù)為16位,被除數(shù)則位32位,在dx和ax中存放,dx存放高位,ax存放低位;
(3)結(jié)果:如果除數(shù)為8位,則al存放商,ah存放余數(shù);如果除數(shù)為16位,則ax存放商,dx存放余數(shù)。
現(xiàn)在要求的divdw功能是:被除數(shù)為dword型,除數(shù)為word型,結(jié)果為dword型,其中dx存放高16位,ax存放低16位,cx存放余數(shù)。
代碼如下:
assume cs:codesg, ds:datadata segmentdw 8 dup(0) data endscodesg segment start: mov ax, 4240hmov dx, 000fhmov cx, 0ahcall divdwmov ax, 4c00hint 21h;----------divdw-------------- divdw: push bx push ax mov ax,dx mov dx,0 div cx mov bx,ax ;將商的高位臨時(shí)放到bx中 pop ax div cx ;上一步div的余數(shù)(在dx中)做高位,連同ax中的數(shù)據(jù)(低位)一起做被除數(shù) mov cx,dx ;將余數(shù)給cx mov dx,bx pop bx ret codesg ends end start實(shí)驗(yàn)結(jié)果:
上面的算法完全按照 X/N=INT(H/N)*10000H+[REM(H/N)*10000H+L]/N(在課本208頁(yè)),對(duì)照代碼分析,一點(diǎn)都不難。
很多事情難,是因?yàn)橐恢蓖涎?#xff0c;不敢開(kāi)始;
很多事情難,是因?yàn)樘?#xff0c;沒(méi)有堅(jiān)持而匆匆放棄;
很多事情難,是因?yàn)橹皇强戳艘谎垭y。
加油。
3,數(shù)值顯示
;dtoc--------------------------- dtoc: push axpush bxpush cxpush dxpush sichange_dtoc:mov cx, 10xor dx, dxcall divdwxor ch, chadd cl, 30hmov ds:[di], cl ;把余數(shù)暫存到內(nèi)存2中inc dimov cx, ax ;檢查商是否為0jcxz dtoc_retjmp change_dtocdtoc_ret:mov cx, disub di, 1 loop_s: mov bl, ds:[di]sub di, 1mov ds:[si], blinc siloop loop_spop sipop dxpop cxpop bxpop axret本程序比較傷腦筋的地方就是求出來(lái)數(shù)字的順序是從低位到高位,而輸出的順序是從高位到低位,這里有一個(gè)比較好的辦法是先把數(shù)字從低位到高位存放到數(shù)據(jù)段中的后邊某個(gè)位置,然后再反序復(fù)制到0位置開(kāi)始的數(shù)據(jù)段中。
加油!
總結(jié)
以上是生活随笔為你收集整理的实验10 编写子程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: json对象转换为字符串数组 java_
- 下一篇: java 坦克大战 素材_经典90坦克大