我只是想知道代碼將一個十進制整數(由用戶輸入)轉換爲2的內存中的恭維表示。2的補碼彙編代碼
例如:用戶輸入1234作爲小數。我想在AX中存儲04D2(2的補碼)(因爲我只允許使用字長字符串)
我正在使用80x86體系結構。
我只是想知道代碼將一個十進制整數(由用戶輸入)轉換爲2的內存中的恭維表示。2的補碼彙編代碼
例如:用戶輸入1234作爲小數。我想在AX中存儲04D2(2的補碼)(因爲我只允許使用字長字符串)
我正在使用80x86體系結構。
將一串數字轉換爲一個整數是非常簡單的:一次只讀一位數字,將其轉換爲十進制數字(通常從其中減去'0')。你把你現有的價值,乘以10,並添加當前數字的價值。
處理負數增加了一點難度。大多數人通過保持一個標誌來表示如果以「 - 」開頭的數字是負數的話。然後,當他們轉換了數字時,如果該標誌被設置,它們就會否定。
那確實,但是,有一個問題:將最負數需要一些額外的工作,因爲(2的補數)的最負數有較大的幅度比你可以表示爲正數(不使用更多的位)。例如,16位2的補碼數字範圍從-32768到+32767,但您需要(至少)17位或無符號的16位數字來表示+32768。
編輯:將十進制數字轉換爲整數後,您需要將整數轉換爲十六進制數字以十六進制顯示。該轉換更容易一些。您重複除以16,餘數成爲下一個十六進制數字。您通常會使用像「abcdef」這樣的表格,並使用該表格索引到表格中以獲取顯示的數字。您重複分配並使用餘數,直到您的股息爲零。一個竅門是,這會產生反向順序的數字(從最小到最重要),所以您通常會將它們放入緩衝區,從緩衝區的末端開始,朝着開始的方向前進。
恩,04d2不是二的補碼。它只是十六進制數字1234。你是否試圖將一個字符串解析爲一個整數? – 2012-04-09 22:15:55
以及我的最終目標是從用戶獲得一個16位數字轉換爲2的讚美,然後找到其八進制表示。 I – cj1098 2012-04-09 22:19:00
您是否需要處理負整數,或者只是正整數? – 2012-04-09 22:22:40