日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念

發布時間:2023/11/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 前言

本文解答王爽《匯編語言》實驗5的(5)(6)題

同時給出一些常見問題的解答

以及給出最易犯錯的地方:數據類型不匹配的解決方案

1 題目解答

1.1 實驗5(5)

1.1.1 題目

將data1和data2段的數據依次相加,結果放入data3段

data1 segmentdb 1,2,3,4,5,6,7,8 data1 endsdata2 segmentdb 1,2,3,4,5,6,7,8 data2 endsdata3 segmentdb 0,0,0,0 ,0,0,0,0 data3 ends

1.1.2 題目解析

  • 數據是字節型數據,注意寄存器使用al、ah系列尋址要+1
  • 8 + 8存在進位,不過沒有超范圍,不影響
  • 此處使用mov指令傳送數據最方便
  • 內存連續的數據,用循環
  • 重要的:程序算法設計(無論多簡單,都不能忽視!)

    1.1.3 代碼

    assume ds:data1,ds:data2,ds:data3 data1 segmentdb 1,2,3,4,5,6,7,8 ; 8 + 8 = 10H 一個字節放得下,沒事! data1 endsdata2 segmentdb 1,2,3,4,5,6,7,8 data2 endsdata3 segmentdb 0,0,0,0 ,0,0,0,0 data3 endsassume cs:code code segment start:mov ax,data1mov ds,axmov bx,0mov cx,8s:mov al,[bx] ; 這種語法格式,很容易讓人忽略【數據類型】,還是AT&T格式好add al,[bx + 10h]mov [bx + 20h],aladd bx,1loop smov ax,04c00hint 21h code ends end start

    1.1.4 代碼注意事項

  • 字節型數據,對應使用8位寄存器,不是16位!
  • 內存中連續的字節型數據,應該是bx + 1,不是+2
  • 可以查一查AT&T格式的x86匯編語言,這種格式,要求操作助記符指明操作數的數據類型,這樣一來,你根本不會出錯,通常這種格式在Linux操作系統使用。
  • 1.2 實驗5(6)

    1.2.1 題目

    用push指令將data1段的前8個字型數據,逆序放入data2段

    data1 segmentdw 1,2,3,4, 5,6,7,8, 9,0ah,0bh,0ch, 0dh,0eh,0fh,0ffh data1 endsdata2 segmentdw 0,0,0,0, 0,0,0,0 data2 ends

    1.2.2 題目解析

  • 字型數據,寄存器使用AX系列,連續內存單元訪問要 +2
  • 逆序,需要使用棧
  • 注意棧頂SS:SP的位置和DS:EA的位置
  • 以下是設計模型

    算法流程模型不再贅述,只需要

  • 將SS:SP和DS:EA指定到對應位置
  • 注意要 +2
  • 1.2.3 代碼

    assume ds:data1,ds:data2 data1 segmentdw 1,2,3,4, 5,6,7,8, 9,0ah,0bh,0ch, 0dh,0eh,0fh,0ffh data1 endsdata2 segmentdw 0,0,0,0, 0,0,0,0 data2 endsassume cs:code code segment start:mov ax,data2mov ss,axmov sp,10hmov ax,data1mov ds,axmov bx,0mov cx,8s:push [bx]add bx,2loop smov ax,04c00hint 21h code ends end start

    1.3 其他語法的注意事項

    對于開頭的地方,需要注意,以下是對的:

    assume ds:data1,ds:data2,ds:data3

    不可以用以下省略!沒有這種省略

    assume ds:data1,data2,data3

    這表明,段寄存器:段是一體的,這兩個東西的組合,共同表明了段的類型,不可以連寫

    2 由題目獲得的重要思想觀念

    2.1 需求分析與程序設計的重要性

    任何程序設計,都要先設計,再實現,不要一上來就實現!一上來就敲代碼的唯一結果,就是反復返工,浪費時間。

    且問題復雜度越大,浪費時間越多,危害也就越大,例如在歷史上,軟件工程發展初級階段,放療設備的軟件失誤導致多人死亡,這個故事足以讓你明白需求分析和設計的重要性。

    2.2 把握指令本質,實現靈活應用

    這里想強調,push和pop指令的本質就是數據傳送指令,它們與mov的本質沒有區別,只不過對其的設計的為了專門的堆棧應用而已,但這不代表你只能將其應用于堆棧。

    例如最開篇的題目,如果你使用push\pop指令,是完全可以實現的,不過第一題確實沒有必要多此一舉。

    2.3 避免數據類型匹配錯誤的解決方案

    對于此處的講解,我單獨放了一篇文章,給到你鏈接

    匯編語言程序設計,如何避免數據類型匹配錯誤

    總結

    以上是生活随笔為你收集整理的【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。