8086 disassembler using 64 bit assembly language

8086 disassembly application. Project done during computer architecture course. Project is done using nasm(yasm) 64 bit assembly and some c functions to handle input/output. I have chosen such technologies because I was curious about few topics: Learning about asm 64 bit programming Compiling assembly executable for windows 64 platform. During the comp architecture course we were doing assembly programming for a ms dos using dosbox. I was interested in making some executable code on a windows 64 platform. Linking assembly code to some higher lever programming language library. During the comp architecture course we were using dos api (int) to handle input, output and some other manipulations. For modern platform you could use windows api function calls or libraries from higher level programming languages. I have chosen to use c and use some basic c input output functions. Understanding assembly procedure calls on 64 platform and differences between win 64 calls and unix/posix 64 calls. Disassembling some simple c applications and exploriing how assembly code is constructed using c compile. To understand how some c function calls are made I have used some super simple c programs that I decompiled using gdb. This project can be found in github.


Program to find GCD of two polynomials

The objective is to write a program that finds greatest common divisor of two polynomials g(x) and h(x). The task does not define what form we get those two polynomials, so let's say we will get them in a form of a String, something like that: $latex ``2x^3+5x^2+8x+3``$ Let's start splitting our problem into chunks and gather some information about the steps we would need to implement. First, what is the greatest common divisor? In math, GCD of two or more integers, which are not all zero, is the largest positive integer that divides each of the integers (1). How do we find it? One way is to use the Euclidean algorithm. The intuition behind this algorithm is such: we have A and B numbers. We divide A by B and get C. If C is 0 - then B is our GCD. If it is not 0, then we set A to B and B to the reminder and continue operation until we get 0. $latex gcd(a,0)=a$ $latex gcd(a,b)=gcd( b,a\,mod\,b )$ Let's say we have 12 and 9. 12 mod 9 is 3. 9 mod 3 is 0. So our GCD is 3. Ok, now we know about GCD…


PowerBuilder, disable system menu`s close button

ulong ll_parent_hwnd ulong ll_sys_menu_hwnd ulong ll_sys_menu_close_flags ulong ll_ret n_cst_numerical u_num ll_parent_hwnd = Handle(this.parentwindow()) ll_sys_menu_hwnd = GetSystemMenu(ll_parent_hwnd, FALSE) ll_sys_menu_close_flags = GetMenuState(ll_sys_menu_hwnd, SC_CLOSE, MF_BYCOMMAND ) ll_ret = u_num.of_bitwiseand(ll_sys_menu_close_flags , MF_DISABLED) ib_close_prev_enabled = (ll_ret = 0) If ib_close_prev_enabled Then EnableMenuItem (ll_sys_menu_hwnd, SC_CLOSE, MF_BYCOMMAND + MF_DISABLED + MF_GRAYED) End If   And to enable it later: If ib_close_prev_enabled Then EnableMenuItem (GetSystemMenu(handle(parentwindow()), FALSE), SC_CLOSE, MF_BYCOMMAND + MF_ENABLED) End If  


PowerBuilder, different DD list values for each row, another way

https://pbbraindump.wordpress.com/2008/11/16/the-ol%E2%80%99-hidden-items-in-the-dddw-problem-part-ii/ Make a second copy of the Color column and have this always contain all the rows in its dddw.  This second column is never filtered. When the row is not the current row, display the column with the unfiltered dddw and hide the filter column.  If the row is the current row, show the column with the filtered dddw, and hide the column with the dddw with all the possible rows.  To do this, add the following expression to the visibility attribute of the column with the dddw which gets filtered: IF (CurrentRow() = GetRow(), 1, 0) The column with the dddw which always contains all the values will have the following expression in its visibility attribute: IF (CurrentRow() = GetRow(), 0, 1)


PowerBuilder, different DD list values for each row

Source http://www.pbdr.com/pbtips/dw/fltrdddw.htm Step 1 - declare instance variables boolean ib_dropdowndropped = False boolean ib_dropdownredrawn = True Step 2 - extend the pbm_dropdown event ib_dropdowndropped = True ib_dropdownredrawn = False of_Filter(True) ib_dropdownredrawn = True Step 3 - extend the pbm_ncpaint event If (ib_dropdowndropped And ib_dropdownredrawn) Then ib_dropdowndropped = False ib_dropdownredrawn = False of_Filter(False) ib_dropdownredrawn = True End If Step 4 - write the of_Filter (boolean ab_switch) subroutine datawindowchild ldwc long ll_getitemnumber string ls_setfilter = "" If (ab_switch) Then ll_getitemnumber = GetItemNumber(GetRow(), "order_status_id") If (ll_getitemnumber = 1) Then // cancelled -> cancelled ls_setfilter = "(order_status_id = 1)" ElseIf (ll_getitemnumber = 2) Then // confirmed -> confirmed ls_setfilter = "(order_status_id = 2)" ElseIf (ll_getitemnumber = 3) Then // new -> cancelled, new, pending ls_setfilter = "(order_status_id = 1) or (order_status_id = 3) or (order_status_id = 4)" ElseIf (ll_getitemnumber = 4) Then // pending -> cancelled, confirmed, pending ls_setfilter = "(order_status_id = 1) or (order_status_id = 2) or (order_status_id = 4)" End If End If GetChild("order_status_id", ldwc) ldwc.SetFilter(ls_setfilter) ldwc.Filter()


Bowerbuilder datawindow autosize problem

You have a datawindow. Datawindow has an Autosize Height set to Details band. You insert a row, set a long string value to some field expecting that field to be auto-sized. And it is, but you don't see a text as Details band does not auto-size. What to do? Whan way to fix this is to call Sort() somewhere after you set v the value fro the datawindow to refresh and auto-size to take effect. But that does not work all times ( for example ... you dont want to sort data now). Another way is to set: dw.Modify ( 'DataWindow.Header.Height.AutoSize=yes') This will also make datawindow to resize all the bands and auto-size will take effect then.


End of content

No more pages to load